# -*- coding:utf-8 -*- import re express = '1 - 2 * (( 6 0 -30 + (-40/5) * (9-2*5/3 +7 /3 *99/4*2998 +10 *568/14)) -(-4*3)/(16-3*2))' def dealwith(express): #处理表达式中的符号+- - -- + express=express.replace('+-','--') express=express.replace('--','+') return express def cal_exp_son(exp_son): #只用来计算原子型的表达式/子表达式(最简单的*/法) if '/' in exp_son: a,b = exp_son.split('/') return str(float(a)/float(b)) elif "*" in exp_son: a,b = exp_son.split("*") return str(float(a)*float(b)) def cal_express_no_bracket(exp): #计算没有括号的表达式 #exp:没有经过处理的最内层带()的表达式 exp = exp.strip("()") print(exp) #先乘除后+- while True: ret = re.search('\d+\.?\d*[*/]-?\d+\.?\d*',exp) if ret: #表达式中还有*/法 exp_son = ret.group() #子表达式(最简单的*/法) print(exp_son) ret = cal_exp_son(exp_son) #print(ret) exp = exp.replace(exp_son,ret) exp = dealwith(exp) else: #说明表达式中没有/*了 ret = re.findall("-?\d+\.?\d*",exp) for i in ret: sum = 0 sum += float(i) return str(sum) new_express = express.replace(' ','') print(new_express) while True: ret = re.search('\([^()]+\)',new_express) if ret: express_no_bracket = ret.group() print(express_no_bracket) ret = cal_express_no_bracket(express_no_bracket) print(new_express,express_no_bracket,ret) new_express = new_express.replace(express_no_bracket,ret) print(new_express) new_express = dealwith(new_express) #处理+- -- print(new_express) else: print(new_express) print("表达式中已经没有()",new_express) ret = cal_express_no_bracket(new_express) print(ret) break