利用堆栈方式,入栈出栈&运算符运算等级,进行计算; 同一级的运算符,递归计算完,作为一个整体,压入栈;如此反复;按照运算优先级递增的顺序压栈,如果出现非此顺序计算符,则将原来的运算符&数字出栈计算,结果再压栈;
# ELEMENT=['+','-','*','/']
import re
LEVEL_1=['+','-']
LEVEL_2=['*','/']
LEVEL_3=['(']
LEVEL_4=[')']
def is_symbol(element):
if element in LEVEL_1+LEVEL_2+LEVEL_3:
return True
return False
def priority(top_sym,wait_sym):
if top_sym in LEVEL_1:
if wait_sym in LEVEL_1:
return '>'
else:
return '<'
elif top_sym in LEVEL_2:
if wait_sym in LEVEL_2:
return '>'
elif wait_sym in LEVEL_3:
return '<'
elif wait_sym in LEVEL_1:
return '>'
else:
raise ValueError('impossible')
elif top_sym in LEVEL_3:
if wait_sym in LEVEL_4:
return '='
else:
return '<'
def calculate(num1,sym1,num2):
if sym1=='+':
return num1+num2
elif sym1=='-':
return num1-num2
elif sym1=='*':
return num1*num2
elif sym1