题解 | #四则运算#
四则运算
https://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e
#不替换也可以,那么下面就不写='(',而是写in ['(','{','[']这些。
a = input().replace('[','(').replace('{','(').replace(']',')').replace('}',')')
#前后加括号,因为下面的计算是基于只要遇到一个')'的符号,就把这个括号内的表达式计算出一个值,
#然后加到上一个表达式的末尾,前后加括号是为了:当原本表达式的所有括号都处理之后,最后整个表达式也进行了计算。
b = '(' + a + ')'
#c将用来保存所有括号内的信息,比如第一个'('和第二个'('之间的内容就作为c的第一个元素,
#而第二个'('和第三个'('之间的内容就作为c的第二个元素。当然了,这里给c初始化的时候第一个元素直接
#赋值为空列表,这是因为如上面所说,遇到最后一个')'的时候,会把计算出来的值加到上一个表达式的末尾(c[-1]),所以必须留一个空的列表来填值。
c = [[]]
i = 0
while i < len(b):
if b[i] == '(':
c.append([])
i += 1
continue
if b[i] in ['+','-','*','/']:
c[-1].append(b[i])
i += 1
continue
if ord('0') <= ord(b[i]) <= ord('9'):
j = i+1
while (j < len(b)) and (ord('0') <= ord(b[j]) <= ord('9')):
j += 1
c[-1].append(int(b[i:j]))
i = j
continue
if b[i] == ')':
d = c.pop(-1)
e = []
k = 0
while k < len(d):
if d[k] == '*':
e[-1] = e[-1] * d[k+1]
k += 2
continue
elif d[k] == '/':
e[-1] = e[-1] / d[k+1]
k += 2
continue
else:
e.append(d[k])
k += 1
continue
#这里需要判断,当表达式是类似(-3*1)或者(-3)这样的形式时,改成(0-3*1)或者(0-3)的形式。
if e[0] == '-':
e = [0] + e
#要先给num赋一个值,因为表达式如(3)的时候,里面没有加减乘除,但是仍然可以取到值。
num = e[0]
k = 0
while k < len(e):
if e[k] == '+':
num = num + e[k+1]
k += 2
continue
if e[k] == '-':
num = num - e[k+1]
k += 2
continue
k += 1
c[-1].append(num)
i += 1
continue
print(int(num))

