表达式求值
用python写表达式求值时,要注意
- cal求值的除法,要int类型转换
- 如果不是操作数、非括号的操作符入栈时,判断当前操作符与栈顶操作符优先级时,要注意加上栈顶不为左括号,或者栈顶元素在字典中,否则会发生segementation fault
priority={'+':1,'-':1,'*':2,'/':2}
op=[]
nums=[]
def cal():
a=nums.pop()
b=nums.pop()
oper=op.pop()
res=0
if oper=='+':
res=b+a
if oper=='-':
res=b-a
if oper=='*':
res=b*a
if oper=='/':
res=int(b/a)
nums.append(res)
s=input()
i=0
while i<len(s):
if s[i].isdigit():
j=i
res=0
while j<len(s) and s[j].isdigit():
res=res*10+int(s[j])
j+=1
i=j-1
nums.append(res)
elif s[i]=='(':
op.append(s[i])
elif s[i]==')':
while op and op[-1]!='(':
cal()
if op :op.pop()
else:
while op and op[-1]!='(' and priority[s[i]]<=priority[op[-1]]:#这里要加上op[-1]!='('
cal()
op.append(s[i])
i+=1
while op:
cal()
print(nums[-1])