Question: HELP ASAP PLEASE!!!!! Create a function named calc to compute an arithmetic expression given as a string parameter expr. The arithmetic expression may include numeric
HELP ASAP PLEASE!!!!!
Create a function named calc to compute an arithmetic expression given as a string parameter expr. The arithmetic expression may include numeric values, four arithmetic operators, and extra spaces. An example of such an input string is 4.25 * 5 - 2.01 / 3 * 7
Requirements: The function calc(expr) must return the computed value if expr is a correct formula, otherwise an error.
Make sure your function names and file name are correct.
When any function returns a numeric value, it must be float When any function returns an error, it must be a string containing error No exec or eval function.
Youll receive no credit if your program uses any of the two functions anywhere. The five functions in the starter code must work
def findNextOpr(s): #s must be a nonempty string. if len(s)<=0 or not isinstance(s,str): print("type mimatch error: findNextOpr") return "type mimatch error: findNextOpr" #In this exercise +, -, *, / are all the 4 operators #The function returns -1 if there is no operator in s, #otherwise returns the position of the leftmost operator #--- code the rest of the function ----# #--- function code ends -----# def isNumber(s): #s must be a non-empty string #returns True if it's convertible to float, else False if len(s)==0 or not isinstance(s, str): print("type mismatch error: isNumber") return "type mismatch error: isNumber" #--- function code starts ---# #--- function code ends ---# def getNextNumber(expr, pos): #expr is a given arithmetic formula in string #pos = start position in expr #1st returned value = the next number (None if N/A) #2nd returned value = the next operator (None if N/A) #3rd retruned value = the next operator position (None if N/A) if len(expr)==0 or not isinstance(expr, str) or pos<0 or pos>=len(expr) or not isinstance(pos, int): print("type mismatch error: getNextNumber") return None, None, "type mismatch error: getNextNumber" #--- function code starts ---# #--- function code ends ---# def exeOpr(num1, opr, num2): #This is a simple utility function skipping type check if opr=="+": return num1+num2 elif opr=="-": return num1-num2 elif opr=="*": return num1*num2 elif opr=="/": return num1/num2 else: return None def calc(expr): #expr: nonempty string that is an arithmetic expression #the fuction returns the calculated result if len(expr)<=0 or not isinstance(expr,str): print("argument error: line A in eval_expr") #Line A return "argument error: line A in eval_expr" #Hold two modes: "addition" and "multiplication" #Initializtion: get the first number newNumber, newOpr, oprPos = getNextNumber(expr, 0) if newNumber is None: print("input formula error: line B in eval_expr") #Line B return "input formula error: line B in eval_expr" elif newOpr is None: return newNumber elif newOpr=="+" or newOpr=="-": mode="add" addResult=newNumber #value so far in the addition mode mulResult=None #value so far in the mulplication mode elif newOpr=="*" or newOpr=="/": mode="mul" addResult=0 mulResult=newNumber pos=oprPos+1 #the new current position opr=newOpr #the new current operator #start the calculation. Use the above functions effectively. while True: #--- code while loop ---# #--- end of function ---#
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
