正则表达式-计算器

利用正则表达式计算下面值:

1 - 2 * ( (60 - 30 + (-40.0/5) * (9 - 2 * 5/3 + 7 / 3 * 10/4*2 +10 *5/14)) -(-4*3)/(16-3*2))

 

 
  

import re
def wipe(s): #定义去除重复+-号函数
res=s.replace("+-","-").replace("++","+").replace("--","+").replace("-+","-")
return res

def get(s):#定义取括号内运算式函数
res=re.sub(" ","",s)#去除字符之间的空格
res1 = re.split("\(([^()]+)\)", res,1)#取最里面的括号的运算式
return res1

def add_num(s):#定义加减运算函数
s=wipe(s)#进行加减法运算前执行去重+-号
num = re.findall("([+\-]?\d+\.?\d*)", s)#取到所有数字的列表num
k=0
for i in num:
k+=float(i)
return k #进行循环相加减并返回最后值

def mul(s):#定义乘除法运算
while True:
res=re.split("(\d+\.?\d*[\*/][\+-]?\d+\.?\d*)", s,1) #将整个运算式以最里面的运算式为中间部分分成三个元素的列表
if len(res)==3 and "*"in res[1]:#判断列表元素是否为三个以及*号是否在最中间运算式里
a,b,c=res#分别取到列表里的元素的值
d,e=b.split("*")#将最里面的运算式以*进行分割取到两边的值
res_s=float(d)*float(e)#将两边的值进行运算
s = a+str(res_s)+c#将结果替换原来的运算式
elif len(res)==3 and "/"in res[1]:#判断列表元素是否为三个以及/号是否在最中间运算式里
a,b,c=res
d,e= b.split("/")#将最里面的运算式以/进行分割取到两边的值
res_s=float(d)/float(e)
s=a+str(res_s)+c
else:#如果列表元素小于三直接进行加减法运算
return add_num(s)

def counter(s): #定义计算器函数
while True:
res=get(s)#进行取值并判断
if len(res)==3:#如果取到的值的列表元素是三进行乘除运算
a,b,c=res
result=mul(b)
s = a + str(result) + c#将最后的乘除运算结果替换原来的运算式
else:
return mul(s) #如果列表元素小于三直接进行加减法运算

a="1 - 2 * ( (60 - 30 + (-40.0/5) * (9 - 2 * 5/3 + 7 / 3 * 10/4*2 +10 *5/14)) -(-4*3)/(16-3*2))"
print(counter(a))

 

转载于:https://www.cnblogs.com/mrpengfei/p/6792718.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值