Python - The Collatz Sequence
Prompt

The most obvious bad practice here is the use of a global variable.  Instead of setting num as a side-effect, your function should return the result.

getNum() is not such a good name for the function.  PEP 8, the official style guide for Python, says that function names should be lower_case_with_underscores.  Furthermore, "get" implies that the function is retrieving a piece of data that is already stored somewhere, which is not the case here.  Finally, "Num" should be more specific.

The use of recursion is not appropriate.  If you want a loop, write a loop.

def ask_integer():
    """
    Return an integer entered by the user (repeatedly prompting if
    the input is not a valid integer).
    """
    while True:
        try:
            return int(input("&gt; "))
        except ValueError:
            print("Please enter an integer")

num = ask_integer()


collatz function

Strictly speaking, you didn't follow the instructions.  Your solution isn't wrong or bad — you just didn't implement the collatz function according to the specification that was given, which says that you should print and return one single number.

def collatz(num):
    """
    Given a number, print and return its successor in the Collatz sequence.
    """
    next = num // 2 if num % 2 == 0 else 3 * num + 1
    print(next)
    return next

num = ask_integer()
while num &gt; 1:
    num = collatz(num)