码迷,mamicode.com
首页 > 其他好文 > 详细

re实现计算器

时间:2020-07-08 23:19:08      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:ret   输入   替换   style   减法   move   文章   计算器   class   


import re
def mul_div(exp):
while re.search("[+-]{2,}",exp):
exp = exp.replace("--", "+")
exp = exp.replace("-+", "-")
exp = exp.replace("++", "+")
exp = exp.replace("+-", "-")
if ‘*‘ in exp:
a,b=exp.split(‘*‘)
return str(float(a)*float(b))
if ‘/‘ in exp:
a,b=exp.split(‘/‘)
return str(float(a)/float(b))
if "+" in exp:
a,b=exp.split("+")
return str(float(a)+float(b))
if "-" in exp:
a , b = exp.split("-")
return str(float(a) - float(b))
def remove_muldiv(srt):
while True:
ret=re.search("\d+(\.\d+)?[/*]-?\d+(\.\d+)?",srt) #3*4
if ret: #3*4
son_srt=ret.group() #3*4 2*-1388335.8476190479
res=mul_div(son_srt) #12
srt=srt.replace(son_srt,res) #替换
else:
return add_div(srt)
def add_div(s):
while True:
sre=re.search("[+-]?\d+(\.\d+)?[+\-]-?\d+(\.\d+)?",s) #1+6
if sre:
s1=sre.group() # 1+6
s2=mul_div(s1) #7
s=s.replace(s1,s2)
else:
return s
def main(s0):
s0=s0.replace(" ","")
shj=re.findall("[a-z]|[A-Z]",s0)
if s0.count("(") == s0.count(")") and s0.count("(") == s0.count(")") and not shj:
while True:
s=re.findall("\(([^()]*)\)",s0) #s=[‘16-8‘]
ss=re.findall("\([^()]*\)",s0) #s=[‘(16-8)‘]
if s :
srd=remove_muldiv(s[0]) # 8.0
s0=s0.replace(ss[0],srd)
elif s0:
print(remove_muldiv(s0))
break
else:
print("输入错误")
main(‘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) )‘)
main("56464+4864564+874*(8745+123-5564+1243+(7+665+-448))")
 

这个的加减法可能比较low,更高级的加减法看另外一篇文章

re实现计算器

标签:ret   输入   替换   style   减法   move   文章   计算器   class   

原文地址:https://www.cnblogs.com/rxybk/p/13269607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!