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