题解 | #四则运算# Python3 递归解法

四则运算

https://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e

Python 3 递归解法:
面试的时候不太敢直接用eval()。。。参考大佬们的c++写了个递归的python解法:
st = input().replace('[','(').replace(']',')').replace('{','(').replace('}',')')
def func(i):
    nums = []
    flag = None
    while i < len(st):
        num = 0
        if st[i] == '(':
            i, num = func(i+1)
        if flag == ')': 
            return i, sum(nums)
        
        while i < len(st) and st[i].isdigit():
            num = num*10 + int(st[i])
            i += 1
        if not nums: 
            nums.append(num) 
        if flag == '+':
            nums.append(num)
        elif flag == '-':
            nums.append(-num)
        elif flag == '*':
            nums.append(nums.pop()*num)
        elif flag == '/':
            nums.append(nums.pop()//num)        
        if i < len(st): flag = st[i] 
        i += 1
    return i, sum(nums)
        
print(func(0)[1])


全部评论
我想了半天看到eval直接笑出来了
点赞 回复 分享
发布于 2025-09-12 22:02 浙江
"5*-3"会算错。。
点赞 回复 分享
发布于 2023-12-13 19:52 香港
无法输出小数
点赞 回复 分享
发布于 2023-07-01 17:49 黑龙江
if not nums: nums.append(num)这里初看没有理解,后来理解了。 感觉这两行去掉,再把flag=None这一行改成flag="+"也行,还更好理解一些。
点赞 回复 分享
发布于 2023-05-24 22:13 广东
num = num*10 + int(st[i])是什么意思呀
点赞 回复 分享
发布于 2023-03-19 18:29 湖北
解答简洁、清楚,学习中
点赞 回复 分享
发布于 2022-12-25 15:23 广东
卧槽,牛逼啊
点赞 回复 分享
发布于 2022-09-18 17:11 四川

相关推荐

2025-12-28 22:19
门头沟学院 Java
不敢追165女神:简历写得毫无特点,你说你要是大二或者大三找寒假实习到暑期实习这段时间,你的简历还能约到面试。但是你是研究生哥,面试官不会因为你是研究生而降低要求,反而会觉得你是研究生才学了这么一点?为什么我不找个同阶段的本科生?
简历中的项目经历要怎么写
点赞 评论 收藏
分享
2025-11-26 11:32
已编辑
好未来_go开发(实习员工)
不服输的咸鱼很聪明:还给打电话呀,我的没给我打电话呢
点赞 评论 收藏
分享
评论
40
18
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务