题解 | #四则运算#

四则运算

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

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)  #返回两个参数,i用来记录计算的位置,
                                #sum(nums)记录括号内数值
        
        while i<len(st) and st[i].isdigit():  #识别单个数字遇到符号直接运行后面的程序
            num = num*10 +int(st[i])          #第八行func(i+1)输出的i会超出len(st)范围,所以这里
            i += 1                            #要加上i<len(st)的判断
        
        if nums ==[]:       #当nums空填入数据,处理因算式括号反复调用func时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] #记录下一个符号由于13行的存在,i+1一定是符号或括号
        i += 1                  #进入下一个运算
    return i,sum(nums)
print(func(0)[1])

全部评论

相关推荐

半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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