题目
根据后缀表达式,求出运算结果。
假设:
- 后缀表达式是由空格为分隔符的字符串
- 操作符是
*, /, +, -
- 操作数都是
个位数
代码中的Stack()
来自于python实现栈Stack
思路
- 创建一个空栈
operandStack
- 把后缀表达式
postfixExpr
由字符串转为列表tokenList
- 从左到右扫描这个列表
tokenList
中的每一个token
1. 如果token
是一个操作数,就把它转为int
类型,并压入operandStack
2. 如果token
是一个操作符,*, /, +, -
等,就对operandStack
进行两次pop
操作。第一次pop
得到的是第二个操作数,第二次pop
得到的是第一个操作数。然后执行数学运算,并把结果压入operandStack
- 当后缀表达式被处理完毕,栈中保存的就是运算结果。将栈中的元素弹出,并返回这个值
# 后缀表达式求值
def postfixEval(postfixExpr):
operandStack = Stack()
tokenList = postfixExpr.split()
for token in tokenList:
if token in "0123456789":
operandStack.push(int(token))
else:
operand2 = operandStack.pop() # 操作数2
operand1 = operandStack.pop() # 操作数1
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 + /'))
3.0
参考:
https://runestone.academy/runestone/static/pythonds/BasicDS/InfixPrefixandPostfixExpressions.html
python【栈】中缀表达式转后缀表达式