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

如何编写Python递归函数计算仅含+与*的字符串表达式结果

你的初始拆分思路完全可行,结合四则运算优先级调整拆分顺序即可实现需求,完全贴合课程给出的方法提示。

核心实现逻辑

  • 修正递归终止条件:当字符串长度为1时,说明已经拆分到单个数字,需要用int()转为整数返回(直接返回字符串会导致后续算术运算报错)。
  • 拆分顺序遵循优先级规则:乘法运算优先级高于加法,因此优先拆分优先级更低的+,没有加号时再拆分*:
    • 若当前字符串包含+,调用split("+", 1)从第一个加号位置拆为左右两个子算式,分别递归计算两个子算式的结果,最终返回两个结果的和。
    • 若当前字符串不存在+,说明剩余运算全为乘法,调用split("*", 1)从第一个乘号位置拆为左右两个子算式,递归计算后返回两个结果的乘积。

这个逻辑不需要额外写运算符位置遍历、优先级比对的复杂代码:低优先级运算最后执行,因此先拆分低优先级运算符,把高优先级的乘法运算留在子递归中优先计算,天然符合四则运算规则,和你“拆分到最小单元再按规则合并”的思路完全一致。

完整可运行代码

def calc(string):
    # 终止条件:拆分到单个数字,转整数返回
    if len(string) == 1:
        return int(string)
    # 优先拆分加号(低优先级)
    if "+" in string:
        left, right = string.split("+", 1)
        return calc(left) + calc(right)
    # 无加号时拆分乘号
    if "*" in string:
        left, right = string.split("*", 1)
        return calc(left) * calc(right)

# 测试题目给定算式
c = "3+4*5+6+1*3"
print(calc(c)) # 输出32,和手动计算结果一致:3 + (4*5) + 6 + (1*3) = 32

验证说明

你可以用其他仅包含个位数、+和*的算式测试,比如"2*3+4*2"会返回14,"1+2+3*4"会返回15,均符合先乘后加的运算规则。题目明确说明终止条件对应长度为1的场景,因此不需要处理多位数、其他运算符的边界情况,当前代码完全满足题目要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:15:19