You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:02:35