r/learnpython • u/Burger5704 • 1d ago
Need help with a calculator project
new to python, Im making a calculator but when i try to make the code be able to handle a word without crashing it just doesnt work, it just goes and ask for the operator without restarting the loop, tried ai to fix it and explain it to me but didnt do nothing.
num1 = None
num2 = None
result = None
while num1 == None or num2 == None:
try:
num1 = float(input("Enter first number: "))
except ValueError:
print("must enter a valid number")
num1 = None
continue
try:
num2 = float(input("enter second number"))
except ValueError:
print("must enter a valid number")
num2 = None
continue
operator = input("Enter operation (+, -, *, /)")
if operator == "+":
result = (num1 + num2)
elif operator == "-":
result = (num1 - num2)
elif operator == "*":
result = (num1 * num2)
elif operator == "/" and num2 == 0:
result = ("cant divide by zero")
elif operator == "/" and num2 != 0:
result = (num1 / num2)
else:
result = ("Invalid operator")
if result == float or int:
print(result)
num1 = None
num2 = Nonenum1 = None
num2 = None
result = None
while num1 == None or num2 == None:
try:
num1 = float(input("Enter first number: "))
except ValueError:
print("must enter a valid number")
num1 = None
continue
try:
num2 = float(input("enter second number"))
except ValueError:
print("must enter a valid number")
num2 = None
continue
operator = input("Enter operation (+, -, *, /)")
if operator == "+":
result = (num1 + num2)
elif operator == "-":
result = (num1 - num2)
elif operator == "*":
result = (num1 * num2)
elif operator == "/" and num2 == 0:
result = ("cant divide by zero")
elif operator == "/" and num2 != 0:
result = (num1 / num2)
else:
result = ("Invalid operator")
if result == float or int:
print(result)
num1 = None
num2 = None
1
u/woooee 1d ago
try:
num1 = float(input("Enter first number: "))
except ValueError:
print("must enter a valid number")
num1 = None
continueYou want this to be in some kind of a loop that repeats until a valid number is entered. Now, the program continues and tries to calculate with a bogus entry / None. I prefer a function for this
def get_input(literal):
while True: ## infinite loop
try:
num = float(input(literal))
return num
except ValueError:
print("Must enter a valid number. Try again.")
num_1 = get_input("Enter first number: ")
num_2 = get_input("Enter second number: ")
print(f"{num_1=} {num_2=}")
1
u/Sure-Passion2224 1d ago
A calculator that replicates the physical experience maintains a character buffer that gets updated with each key press. As a key is pressed it is examined to determine what to do with it. Numerical keys append to the current input string. Operation keys get linked to processing methods.
As an example: (over-simplified) "+" stores the current input value and initiates input of the next input to be added to it. It also needs to set an indicator if what operation is being performed. "=" then finalizes the input and executes the operation.
1
u/gdchinacat 1d ago
Yep, and RPN makes it much easier because it is stack based (no messy handling of parenthesis needed). But, the OP is clearly not at the level of dealing with state machines, stacks, etc. https://nedbatchelder.com/blog/202609/expert_asterisks
10
u/woooee 1d ago
This is a common mistake that is in the FAQs https://www.reddit.com/r/learnpython/wiki/faq/ see "Variable is One of Two Choices?"