题解 | #四则运算#

四则运算

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

def main(i):
    nums = []
    flag = None
    while i < len(st):
        num = 0
        if st[i] == '(':
            i, num = main(i + 1)
        if flag == ')':
            return i, sum(nums)
        # 当i还在表达式范围,且当前所取的字符为数字
        # 那么num等于num*10加上当前位置的数字
        # 那么为什么要*10呢?
        # 这里其实是要考虑数字不是一位,可能是超过一位的数字,当i+1后,st[i]仍然是数字,就需要使用这个表达式
        # num = num * 10 + int(st[i])
        while i < len(st) and st[i].isdigit():
            num = num * 10 + int(st[i])
            i += 1

        # 当结果集合为空,则将第一个数字添加到nums,后续就是按规则添加数字到nums
        # 这里我们可以知道flag来源于当前数字之前的判断不是数字的位置
        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)

        # 设置flag,用于后续计算时作为判断条件
        if i < len(st):
            flag = st[i]
        i += 1
    return i, sum(nums)


while True:
    try:
        st = input().replace('[', '(').replace(']', ')').replace('{', '(').replace('}', ')')
        print(
            main(0)[1]
        )
    except:
        break

全部评论

相关推荐

牛马人的牛马人生:500一天吗?香麻了
投递字节跳动等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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