# [Solved] NameError: name ‘num’ is not defined

`num` is not actually used in `multiply()` so there is no reason to pass it in. Instead, declare `multiply()` without the argument:

``````def multiply():
'''(num1 * num2)'''
.
.
``````

And call it from `__main__` like this:

``````if maths == "Multiplication" or "m" or "x":
multiply()
``````

There seems no point in checking within `multiply()` whether it is supposed to perform multiplication as does this line:

``````if maths == "Multiplication" or "m" or "x":
``````

And you try to call `multiply()` recursively, which will fail:

``````if ans == multiply(num1, num2):
``````

… just use the `*` operator.

Finally, why return the result of the multiplication? What use is the product if the multiplicands are not known outside of function `multiply()`? It might be better to return whether the user got the correct answer.

Putting all of the above together, you get this:

``````import random

def multiply():
'''(num1 * num2)'''
num1 = random.randint(1,12)
num2 = random.randint(1,12)
ans = int(input("What is the answer to " + str(num1) + " x " + str(num2) + " ? "))
correct = (ans == num1 * num2)
if correct:
print("You are correct! ")
else: