from pythondsbasicstack import Stack def postfixEvalpostfixE
from pythonds.basic.stack import Stack
def postfixEval(postfixExpr):
 operandStack = Stack()
 tokenList = postfixExpr.split()
for token in tokenList:
 if token in \"0123456789\":
 operandStack.push(int(token))
 else:
 operand2 = operandStack.pop()
 operand1 = operandStack.pop()
 result = doMath(token,operand1,operand2)
 operandStack.push(result)
 return operandStack.pop()
def doMath(op, op1, op2):
 if op == \"*\":
 return op1 * op2
 elif op == \"/\":
 return op1 / op2
 elif op == \"+\":
 return op1 + op2
 else:
 return op1 - op2
print(postfixEval(\'7 8 + 3 2 + /\'))
Modify the postfix evaluation algorithm so that it now handles exponentiation and modulo operations..
Solution
Hi, I have added required line of code to support ^ and % in postfix evaluation.
Please let me know in case of any issue.
from pythonds.basic.stack import Stack
 def postfixEval(postfixExpr):
 operandStack = Stack()
 tokenList = postfixExpr.split()
 for token in tokenList:
 if token in \"0123456789\":
 operandStack.push(int(token))
 else:
 operand2 = operandStack.pop()
 operand1 = operandStack.pop()
 result = doMath(token,operand1,operand2)
 operandStack.push(result)
 return operandStack.pop()
 def doMath(op, op1, op2):
 if op == \"^\":
 return op1 ** op2
 elif op == \"*\":
 return op1 * op2
 elif op == \"/\":
 return op1 / op2
 elif op == \"%\":
 return op1 % op2
 elif op == \"+\":
 return op1 + op2
 else:
 return op1 - op2
 print(postfixEval(\'7 8 + 3 2 + /\'))


