somerandomboi
somerandomboi

Reputation: 11

I keep getting this "unrecognized operation" whenever i need to use the "?"

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()

Upvotes: 0

Views: 60

Answers (2)

Hujaakbar
Hujaakbar

Reputation: 1080

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:

enter image description here

Upvotes: 1

Mureinik
Mureinik

Reputation: 312086

After checking for choice == '?', your code just continues. You should terminate the function call after handling the history:

if choice == '?':
    his_file = open("calc_his.txt", "r")
    print(his_file.read())
    return # here

Upvotes: 0

Related Questions