题目:
解答:
def compute(st1,st2):
b=st1.pop()
a=st1.pop()
op=st2.pop()
if op=='+':
a+=b
elif op=='-':
a-=b
elif op=='*':
a*=b
elif op=='/':
a//=b
st1.append(a)
def priority(op1,op2):
if op1=='(':
return False
elif (op1=='+' or op1=='-') and (op2=='*' or op2=='/'):
return False
return True
while True:
try:
s=input()
st1=[] #记录操作数
st2=[] #记录运算符
st2.append('(')
s+=')'
flag=0 #0表示当前为数字,1表示当前为运算符
i=0
#print(s)
while i<len(s):
#print(i,s[i],flag,st1,st2)
if s[i]=='(':
st2.append('(')
i+=1
elif s[i]==')':
while(st2[-1]!='('):
compute(st1,st2)
st2.pop() #弹出左括号
i+=1
elif flag: #运算符
while priority(st2[-1],s[i]): #栈中运算符优先级是否更高,若更高,则可对当前栈中元素进行运算
compute(st1,st2)
st2.append(s[i])
flag=0 #修改标志,下一次为数字
i+=1
else: #数字
cur=i
if s[i]=='-' or s[i]=='+': #正负号
i+=1
while(s[i].isdigit()): #获取当前数字
i+=1
tmp=int(s[cur:i])
st1.append(tmp)
flag=1
print(st1.pop())
except:
break