Hello, I need help for my Computer Science HW. Based on these codes, I have crea
ID: 3884700 • Letter: H
Question
Hello, I need help for my Computer Science HW.
Based on these codes, I have create a function named calc to compute an arithmetic expression given as a string parameter expr 4.25 * 5 - 2.01 / 3 * 7 + 2.
The arithmetic expression may include numeric values, four arithmetic operators, and extra spaces.
4.25 * 5 - 2.01 / 3 * 7 + 2
PLEASE HELP!!
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 ---#
Explanation / Answer
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 ---#
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.