思路:
先将中缀表达式改为后缀表达式,这样就不用考率需要使用括号来标识操作符的优先级。后缀表达式的计算按 操作符 从左到右出现的顺序依次执行(不考虑运算符之间的优先级),对于计算机而言是比较简单的结构。
然后实现后缀表达式的计算。需要注意的是:在处理后缀表达式(RPN)时存在一个问题,特别是结果类型的处理。具体来说,你在 evalRPN 中最后将结果强制转换为整数 int(result),这将导致结果丢失分数部分。
为了解决这个问题,你可以将 result 保持为 Fraction 类型,而不是转换为整数。
from operator import add, sub, mul
from fractions import Fraction
def div(numerator, denominator):
if denominator == 0:
return "ERROR"
# 使用 Fraction 来得到最简分数
result = Fraction(numerator, denominator)
return result
def infix_to_postfix(expression):
# 优先级字典
precedence = {
'+': 1,
'-': 1,
'*': 2,
'/'