Python计算13/5返回0?逆波兰表达式问题求助
逆波兰表达式除法计算错误问题排查
你的代码在处理逆波兰表达式的除法时出现计算错误,核心原因是运算顺序搞反了,同时减法逻辑也存在同样的问题。
你的代码:
s = [] for token in tokens: print(s) if token.isnumeric(): s.append(int(token)) else: a = s.pop() b = s.pop() if token == '+': s.append(a + b) elif token == '-': s.append(a - b) elif token == '*': s.append(a * b) elif token == '/': print(int(a / b)) s.append(int(a / b)) return s.pop()
运行输出:
[4] [4, 13] [4, 13, 5] 0 <- this should be 2 [4, 0]
错误原因分析:
逆波兰表达式的运算规则是:遇到运算符时,取栈顶两个元素,后弹出的元素是左操作数,先弹出的是右操作数。
以你遇到的13 5 /场景为例:
- 栈中元素为
[4,13,5],遇到/时,先pop()得到5(赋值给a),再pop()得到13(赋值给b)。 - 你当前代码计算的是
a/b即5/13,Python中int(5/13)结果为0,这就是错误的根源。 - 正确计算应为
b/a即13/5,int(13/5)结果为2,符合预期。
另外,减法逻辑也同样错误:比如遇到4 13 -,正确结果是4-13=-9,但你的代码会计算13-4=9,完全不符合逆波兰表达式的规则。
修正后的关键代码:
调整减法和除法的运算顺序即可:
elif token == '-': s.append(b - a) elif token == '/': print(int(b / a)) s.append(int(b / a))
补充说明:
Python的int()函数对浮点数取整是向零取整,刚好符合LeetCode中逆波兰表达式除法的要求(比如-13/5结果为-2而非-3),无需额外处理取整逻辑。
内容的提问来源于stack exchange,提问作者ndnchapathi69
相关产品推荐
相关产品推荐

