原文:https://blog.csdn.net/qq_40794602/article/details/81738630
import re
express = '(1 -2 * (60-30+(-40/5)* (9-2*5/3+7 /3+99/4*2998)))'
express = '1+2*3+(3+4)'
#表达式:
def delwith(new_express):
new_express = new_express.replace('+-','-')
new_express = new_express.replace('--','+')
return new_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)
# print(new_express)
# return exp
exp = delwith(exp)
else:
ret = re.findall('-?\d+\.?\d*',exp)
sum = 0
for i in ret:
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)
new_express = new_express.replace(express_no_bracket,ret)
# print(new_express)
new_express = delwith(new_express)
# print(new_express)
else:
print("已经没有括号了:",new_express)
new_express = cal_express_no_bracket(new_express)
print("已经没有括号了:",new_express)
break
python正则计算器(转)
猜你喜欢
转载自blog.csdn.net/ljwy1234/article/details/83542196
今日推荐
周排行