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

基于Token的Python计算器减法功能异常排查与解决咨询

问题原因

最常见的原因是表达式解析函数(expression)仅实现了加法的递归处理逻辑,未正确覆盖减法分支。这类递归下降计算器中,expression负责处理加减运算,term负责乘除。如果修改时只给expression加了减号的匹配判断,但没有在匹配到减号时执行减法操作,或者根本没加入减号的循环处理,就会导致输入减法时,程序只计算第一个term就直接返回,完全忽略后续的减号和第二个term。

比如错误的expression实现可能是这样:

def expression():
    result = term()
    # 只处理加号,没处理减号
    while peek() == '+':
        consume('+')
        result += term()
    return result

这种情况下,输入4-3时,程序只会计算第一个term(4.0),然后因为没匹配到加号,直接返回结果,完全无视后面的-3。

修复方案

修改expression函数,加入减号的处理逻辑,在循环中同时匹配+和-,并根据当前运算符执行对应的加减操作:

def expression():
    result = term()
    # 同时匹配加号和减号
    while peek() in ('+', '-'):
        # 获取当前运算符并消耗该token
        op = consume(peek())
        if op == '+':
            result += term()
        elif op == '-':
            # 匹配到减号时执行减法
            result -= term()
    return result

另外需要确保:

  • 分词器(tokenizer)能正确将减号识别为独立的token,比如把4-3拆分为['4', '-', '3']而不是单个字符串。
  • peek()函数能正确获取下一个未消耗的token,consume()函数能正确标记token为已处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:10:33