上篇文章介绍了 中缀表达式 转 后缀表达式
这篇文章接着分享 计算后缀表达式的值
需求
需求:求后缀表达式的值;
输入:后缀表达式;
输出:运算结果
代码演示
from test05_stack.Stack import Stack
import re
def after_opt_ret(expr):
# 操作数范围
# expr_list = range(10000)
# 初始化一个栈,用来保存操作数
sk = Stack()
# 从前到后扫描操作数列表
for item in expr.split():
# 如果是操作数,直击进栈
if re.match(r'\d+', item):
sk.push(int(item))
# 如果是操作符,把栈中最上面的两个数拿出来运算,把运算结果保存到栈中
elif item in "+-*/":
expr02 = sk.pop()
expr01 = sk.pop()
ret = operate(item, expr01, expr02)
sk.push(ret)
# 取出栈中表达式的运行结果
# 返回表达式的运算结果
return sk.peek()
def operate(opt, expr01, expr02):
"""
两个数运算,返回结果
:param opt: 操作符
:param expr01: 操作数1
:param expr02: 操作2
:return: 运算结果
"""
if opt == "+":
return expr01 + expr02
elif opt == "-":
return expr01 - expr02
elif opt == "*":
return expr01 * expr02
elif opt == "/":
return expr01 / expr02
# 测试
print(after_opt_ret("10 20 30 + +"))
print(after_opt_ret("10 20 30 * +"))
# 测试结果
60
610