I'm writing a program in Python for a calculator, and I'm trying to implement a history system. However, when I need to access the history, I use the symbol to access it, but it keeps telling me that it is unrecognized.
I used the ? symbol, which is what I set to access the history, and I expected it to accept it and perform the task it was meant to.
However, it just told me that the symbol was unrecognized.
from random import choice
def add(a,b):
return a+b
def subtract(a,b):
return a-b
def multiply (a,b):
return a*b
def divide(a,b):
try:
return a/b
except Exception as e:
print(e)
def power(a,b):
return a**b
def remainder(a,b):
return a%b
def select_op(choice):
if (choice == '#'):
return -1
elif (choice == '$'):
return 0
elif (choice in ('+','-','*','/','^','%')):
while (True):
num1s = str(input("Enter first number: "))
print(num1s)
if num1s.endswith('$'):
return 0
if num1s.endswith('#'):
return -1
try:
num1 = float(num1s)
break
except:
print("Not a valid number,please enter again")
continue
while (True):
num2s = str(input("Enter second number: "))
print(num2s)
if num2s.endswith('$'):
return 0
if num2s.endswith('#'):
return -1
try:
num2 = float(num2s)
break
except:
print("Not a valid number, please enter again")
continue
def history(num1s, choice, num2s, result):
his_file = open("calc_his.txt", "a")
his_file = his_file.write(str(num1) + " " + choice + " " + str(num2) + "=" + result + "\n")
if choice == '?':
his_file = open("calc_his.txt", "r")
print(his_file.read())
result = 0.0
last_calculation = ""
if choice == '+':
result = add(num1, num2)
history(num1, choice, num2, str(result))
elif choice == '-':
result = subtract(num1, num2)
history(num1, choice, num2, str(result))
elif choice == '*':
result = multiply(num1, num2)
history(num1, choice, num2, str(result))
elif choice == '/':
result = divide(num1, num2)
history(num1, choice, num2, str(result))
elif choice == '^':
result = power(num1, num2)
history(num1, choice, num2, str(result))
elif choice == '%':
result = remainder(num1, num2)
history(num1, choice, num2, str(result))
else:
print("Something Went Wrong")
last_calculation = "{0} {1} {2} = {3}".format(num1, choice, num2, result)
print(last_calculation)
else:
print("Unrecognized operation")
while True:
print("Select operation.")
print("1.Add : + ")
print("2.Subtract : - ")
print("3.Multiply : * ")
print("4.Divide : / ")
print("5.Power : ^ ")
print("6.Remainder: % ")
print("7.Terminate: # ")
print("8.Reset : $ ")
print("8.History : ? ")
# take input from the user
choice = input("Enter choice(+,-,*,/,^,%,#,$,?): ")
print(choice)
if(select_op(choice) == -1):
#program ends here
print("Done. Terminating")
exit()
The issue is you have placed an if
conditional to match '?' character nested inside elif (choice in ('+','-','*','/','^','%')):
condition.
Since this elif
conditional doesn't match '?' character, your if choice == '?':
conditional is never being hit.
Place this if choice == '?':
conditional outside of elif (choice in ('+','-','*','/','^','%')):
condition.
Solution:
from random import choice
def add(a, b):
return a + b
def subtract(a, b):
return a - b
def multiply(a, b):
return a * b
def divide(a, b):
try:
return a / b
except Exception as e:
print(e)
def power(a, b):
return a**b
def remainder(a, b):
return a % b
def select_op(choice):
if choice == "#":
return -1
elif choice == "$":
return 0
elif choice == "?":
his_file = open("calc_his.txt", "r")
print("history: ")
print(his_file.read())
elif choice in ("+", "-", "*", "/", "^", "%"):
while True:
num1s = str(input("Enter first number: "))
print(num1s)
if num1s.endswith("$"):
return 0
if num1s.endswith("#"):
return -1
try:
num1 = float(num1s)
break
except:
print("Not a valid number,please enter again")
continue
while True:
num2s = str(input("Enter second number: "))
print(num2s)
if num2s.endswith("$"):
return 0
if num2s.endswith("#"):
return -1
try:
num2 = float(num2s)
break
except:
print("Not a valid number, please enter again")
continue
def history(num1s, choice, num2s, result):
his_file = open("calc_his.txt", "a")
his_file = his_file.write(
str(num1) + " " + choice + " " + str(num2) + "=" + result + "\n"
)
result = 0.0
last_calculation = ""
if choice == "+":
result = add(num1, num2)
history(num1, choice, num2, str(result))
elif choice == "-":
result = subtract(num1, num2)
history(num1, choice, num2, str(result))
elif choice == "*":
result = multiply(num1, num2)
history(num1, choice, num2, str(result))
elif choice == "/":
result = divide(num1, num2)
history(num1, choice, num2, str(result))
elif choice == "^":
result = power(num1, num2)
history(num1, choice, num2, str(result))
elif choice == "%":
result = remainder(num1, num2)
history(num1, choice, num2, str(result))
else:
print("Something Went Wrong")
last_calculation = "{0} {1} {2} = {3}".format(num1, choice, num2, result)
print(last_calculation)
else:
print("Unrecognized operation")
while True:
print("Select operation.")
print("1.Add : + ")
print("2.Subtract : - ")
print("3.Multiply : * ")
print("4.Divide : / ")
print("5.Power : ^ ")
print("6.Remainder: % ")
print("7.Terminate: # ")
print("8.Reset : $ ")
print("8.History : ? ")
# take input from the user
choice = input("Enter choice(+,-,*,/,^,%,#,$,?): ")
print(choice)
if select_op(choice) == -1:
# program ends here
print("Done. Terminating")
exit()
Result: