express = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
# 2776672.6952380957
# eval
# 先算小括号里的
# 再先乘除后加减的计算


#-*-coding:utf-8-*- __author__ = 'Eva_J' import re def cal(exp): # '40/5.3' '2*3' if '*' in exp: a,b = exp.split('*') return str(float(a) * float(b)) elif '/' in exp: a,b = exp.split('/') return str(float(a) / float(b)) def exp_format(exp): exp = exp.replace('--','+') exp = exp.replace('++','+') exp = exp.replace('-+','-') exp = exp.replace('+-','-') return exp def nobracket_exp_handle(no_bracket_exp): print('--->',no_bracket_exp) while True: ret = re.search('\d+(\.\d+)?[*/]-?\d+(\.\d+)?',no_bracket_exp) if ret: son_exp = ret.group() res = cal(son_exp) print(res) no_bracket_exp = no_bracket_exp.replace(son_exp,res) print(no_bracket_exp) else:break print('-->',no_bracket_exp) no_bracket_exp = exp_format(no_bracket_exp) ret_lst = re.findall('[+-]?\d+(?:\.\d+)?',no_bracket_exp) ret = sum([float(num) for num in ret_lst]) print('-->',ret) return str(ret) express = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )' # 去掉空格 express = express.replace(' ','') print(express) # 匹配出最内部的括号的表达式 while True: ret = re.search('\([^()]+\)',express) if ret: no_bracket_exp = ret.group() print(no_bracket_exp) # 先算乘除 先把乘除法匹配出来 # 乘除法 不匹配第一个数字的负号 res = nobracket_exp_handle(no_bracket_exp) express = express.replace(no_bracket_exp,res) express = exp_format(express) else:break ret = nobracket_exp_handle(express) print(ret)
# 'a*b'
# 50行之内
# 三级菜单 递归 + 堆栈
# 时间模块 计算时间差
# random模块 发红包 验证码
# os 计算文件夹内所有文件的总大小