题解 | #四则运算# 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])


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

相关推荐

许愿ssp的咸鱼很不想泡池子:import python as pyhton
点赞 评论 收藏
分享
评论
36
15
分享

创作者周榜

更多
牛客网
牛客企业服务