1 import re 2 3 express = '1 - 2 * ( ( 6 0 -3 0 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )' 4 # 去掉所有的空格 5 # 找括号,先找括号里面没有括号的最里面的括号 6 # 先算括号里的乘除,再算括号里的加减 7 8 # 计算表达式 9 def dealwith(express): 10 if "+-" in express:express.replace("+-","-") 11 if "+-" in express:express.replace("--","+") 12 return express 13 14 def cal_exp_son(exp_son): 15 # 只用来计算原子型表达式,最小的表达式 16 if "/" in exp_son: 17 a,b = exp_son.split("/") 18 return str(float(a)/float(b)) 19 if "*" in exp_son: 20 a,b = exp_son.split("*") 21 return str(float(a) * float(b)) 22 23 def cal_express_no_bracket(exp): 24 # 计算没有括号的表达式 25 # exp 为未经过处理的最内层的带括号的表达式 26 exp = exp.strip("()") 27 print(exp) 28 # 先乘除,后加减 29 while True: 30 ret = re.search("d+.?d*[*/]-?d+.?d*",exp) 31 if ret : 32 exp_son = ret.group() 33 ret = cal_exp_son(exp_son) 34 exp = exp.replace(exp_son,ret) 35 36 # 将空格去除 37 new_express = re.sub(" ","",express) 38 39 #提取括号里面没有其他括号的的表达式 40 while True: 41 ret = re.search("([^()]+)",new_express) 42 if ret : 43 express_no_bracket = ret.group() 44 ret = cal_express_no_bracket(express_no_bracket) 45 new_express= new_express.replace(express_no_bracket,ret) 46 print(new_express) 47 new_express = dealwith(new_express) 48 print(new_express) 49 else: 50 print("表达式已经没有括号了",new_express) 51 break