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

如何解决Python中switch逻辑下的Zero Division Error问题?

问题根源分析

你遇到的ZeroDivisionError并不是乘法操作触发的,而是字典初始化时会预先计算所有键对应的表达式导致的。Python创建字典时,所有分支的表达式都会被立即执行,不管你后续是否使用该键。比如处理最后一个*运算符时,栈中弹出0(firstNumber)和42(secondNumber),此时字典里的"/"分支表达式secondNumber / firstNumber会被计算为42 / 0,直接触发除零错误——哪怕当前要执行的是乘法。

修复方案

核心思路是避免预先计算所有运算符的表达式,以下两种方式都可以解决问题:

方案1:用if-elif-else替代字典

逻辑清晰,只有匹配当前运算符的分支才会执行计算:

def reversePolishNotation(tokens):
    operators = ["+", "-", "*", "/"]
    stack = []

    for token in tokens:
        if token not in operators:
            stack.append(int(token))
        else:
            firstNumber = stack.pop()
            secondNumber = stack.pop()
            if token == "+":
                res = firstNumber + secondNumber
            elif token == "-":
                res = secondNumber - firstNumber
            elif token == "*":
                res = firstNumber * secondNumber
            elif token == "/":
                res = secondNumber / firstNumber
            stack.append(int(res))
    
    return int(stack[-1])

方案2:用lambda函数延迟计算

让字典存储lambda表达式,只有调用时才执行运算:

def reversePolishNotation(tokens):
    operators = ["+", "-", "*", "/"]
    stack = []

    for token in tokens:
        if token not in operators:
            stack.append(int(token))
        else:
            firstNumber = stack.pop()
            secondNumber = stack.pop()
            switcher = {
                "+": lambda a, b: a + b,
                "-": lambda a, b: b - a,
                "*": lambda a, b: a * b,
                "/": lambda a, b: b / a
            }
            res = switcher[token](firstNumber, secondNumber)
            stack.append(int(res))
    
    return int(stack[-1])
验证结果

修复后的代码可以正常处理你提供的测试用例,最终返回结果为0,不会触发ZeroDivisionError。

内容的提问来源于stack exchange,提问作者Ankit Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:25:17