Question: Create a Python function named calc to compute a one line arithmetic expression given as a string parameter expr. The arithmetic expression may include numeric

Create a Python function named calc to compute a one line arithmetic expression given as a string parameter expr. The arithmetic expression may include numeric values, four arithmetic operators, and extra spaces. An example of input string is 4.25 * 5 - 2.01 / 3 * 7 + 2

Code the empty segments so the five work completely.

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 not isinstance(expr,str) or len(expr)<=0: 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

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!