描述:用户输入一系列算式字符串,程序返回计算结果。
要求:不使用eval、exec函数。
实现思路:找到当前字符串优先级最高的表达式,在算术运算中,()优先级最高,则取出算式最底层的(),再进行加减乘除运算。对于加减乘除,也要确立一个优先级,可以使用一个运算符列表,用for循环逐个处理运算符,并且要考虑同级情况(如for遍历至*时,也要考虑同级别的\是否要提前运算)。不断循环上述过程,直到最终得到一个结果。
关键点:使用re模块匹配出当前状态下优先级最高的算式。
result = re.search('\([^()]+\)',s)
实现代码:
import re
'''根据本逻辑,‘-'必须早于‘+'循环 否则特殊情况会报错
原因是若出现符号--,会被处理为+,若+优先遍历,最后+将无法被处理'''
oper_char = ['^','*','/','-','+']
def format_str(s):
'''除去空格和两边括号'''
return s.replace(' ','').replace('(','').replace(')','')
def handle_symbol(s):
'''处理多个运算符并列的情况'''
return