I'm just starting to learn python, and recently I tried to create my own kinda calculator. I wrote the code, and everything looks pretty fine to me, but for some reason I get the error 'if math_multiply: NameError: name 'math_multiply' is not defined'. I get it whenever I try to do anything, but multiplying. Please help me with this. Attaching code to the message as well.
P.S.: I know this question is very stupid, but I am a newbie who's only starting... So, please pardon me.
f_n = input('Type in your first number: ')
s_n = input('Type in your second number: ')
math = input('What are we doing? ')
if math == '*':
math_multiply = True
if math == '+':
math_plus = True
elif math == '-':
math_minus = True
elif math == '/':
math_divide = True
if math_multiply:
print(f'Your answer is: {int(f_n) * int(s_n)}')
elif math_plus:
print(f'Your answer is: {int(f_n) + int(s_n)}')
elif math_minus:
print(f'Your answer is: {int(f_n) - int(s_n)}')
elif math_divide:
print(f'Your answer is: {int(f_n) / int(s_n)}')
else:
print("It's not an arithmetic operation")
3 Answers 3
You only set math_multiply if they entered *, it's not set if they chose a different operation, so you get an error when you check its value. You should initialize all those variables to False so that the later tests will work.
f_n = input('Type in your first number: ')
s_n = input('Type in your second number: ')
math = input('What are we doing? ')
math_multiply = math_plus = math_minus = math_divide = False
if math == '*':
math_multiply = True
elif math == '+':
math_plus = True
elif math == '-':
math_minus = True
elif math == '/':
math_divide = True
if math_multiply:
print(f'Your answer is: {int(f_n) * int(s_n)}')
elif math_plus:
print(f'Your answer is: {int(f_n) + int(s_n)}')
elif math_minus:
print(f'Your answer is: {int(f_n) - int(s_n)}')
elif math_divide:
print(f'Your answer is: {int(f_n) / int(s_n)}')
else:
print("It's not an arithmetic operation")
Alternatively you can do this without any of those variables. Just put the calculations in the first set of if statements:
f_n = input('Type in your first number: ')
s_n = input('Type in your second number: ')
math = input('What are we doing? ')
if math == '*':
print(f'Your answer is: {int(f_n) * int(s_n)}')
elif math == '+':
print(f'Your answer is: {int(f_n) + int(s_n)}')
elif math == '-':
print(f'Your answer is: {int(f_n) - int(s_n)}')
elif math == '/':
rint(f'Your answer is: {int(f_n) / int(s_n)}')
else:
print("It's not an arithmetic operation")
Comments
You didn't define the "math_multiply" variable. At the start of your code, add math_multiply = False
Comments
Previous answers explained the error. But I see that you are trying to use labels for operations, if so, you can check my version of your code.
# programs constant values for arithmetic operations
ADDITION, SUBTRACT = '+', '-'
MULTIPLY, DIVISION = '*', '/'
# taking input from the user
left_num = float(input('Type in your first number: '))
right_num = float(input('Type in your second number: '))
math_oper = input('What are we doing? ')
# calculating the result
if math_oper == ADDITION:
result = left_num + right_num
elif math_oper == SUBTRACT:
result = left_num - right_num
elif math_oper== MULTIPLY:
result = left_num * right_num
elif math_oper == DIVISION:
result = left_num / right_num
else:
print("It's not an arithmetic operation")
exit() # stop the program
# print the result
print(f"{left_num} {math_oper} {right_num} = {result}")
But notice that the program doesn't check the input thoroughly. It will crash if you, for example, try to divide by zero.
if math_multiply:math_multiplyvariable won't even exist. So just set each of those variables to nothing or false before doing yourifstatements. Likemath_multiply=False,math_plus=False,math_minus=False, andmath_divide=False.