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

Python编写数学表达式拆分函数输出异常原因咨询

Python括号匹配函数异常输出原因分析

问题背景

尝试编写Python自定义函数实现数学表达式拆分:接收字符串输入,将表达式拆分为片段存入数组。以(1+2)+(2+4)为例,预期拆分结果为["(1+2)", "+", "(2+4)"]。
当前暂未实现括号间运算符的提取逻辑,优先验证括号片段识别功能时,出现了不符合预期的输出。

现有实现代码

def crush(string):
    crushed_string = []
    for i in range(0, len(string)):
        current_problem = ""
        if string[i] == "(":
            for x in range(i, len(string)):
                if string[x] == ")":
                    for y in range(i, x+1):
                        current_problem += string[y]
                    print(current_problem)


string = "(1+2)+(3+4)"
crush(string)

实际运行输出

(1+2)
(1+2)(1+2)+(3+4)
(3+4)

异常产生的具体原因

异常由两个逻辑漏洞共同导致:

  • 内层右括号匹配循环没有终止逻辑
    最外层i循环逐字符遍历字符串,当i定位到一个左括号(后,内层x循环会从当前左括号位置向后遍历所有字符,每遇到一个右括号就会执行一次拼接打印,且打印后不会跳出循环,会继续向后找更多右括号。
    以测试用例(1+2)+(3+4)为例:当i=0(定位到第一个左括号)时,x首先走到索引4位置的第一个右括号,此时完成第一次拼接打印;但x循环不会停止,会继续向后遍历,直到走到索引9位置的第二个右括号,再次触发拼接打印逻辑。
  • 临时拼接变量的重置时机错误
    current_problem作为存储单次括号匹配结果的临时变量,被放在最外层i循环的开头初始化,这意味着:同一个i对应的内层x循环多次触发拼接逻辑时,current_problem不会被清空,上一次拼接的内容会残留。
    还是以i=0的场景为例:第一次匹配到索引4的右括号时,current_problem被赋值为(1+2)并打印;后续匹配到索引9的右括号时,程序会再次把索引0到9的所有字符(1+2)+(3+4)拼接到已经存有(1+2)的current_problem后面,最终打印出异常的(1+2)(1+2)+(3+4)。

当最外层i循环走到索引6位置(定位到第二个左括号)时,内层x循环匹配到索引9的右括号,拼接出(3+4)打印,就是输出的第三行内容。

注:当前逻辑仅会匹配左括号和其后方出现的右括号,还未处理括号嵌套、配对校验等场景,后续开发运算符提取逻辑时可以一并调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:03:24