re实现计算器

Posted rxybk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了re实现计算器相关的知识,希望对你有一定的参考价值。


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实现计算器的主要内容,如果未能解决你的问题,请参考以下文章

re实现计算器

golang代码片段(摘抄)

Node.js JavaScript 片段中的跳过代码

python模块——re模块(简单的计算器功能实现_eval版)

如何共享元素从片段到活动的过渡

片段项目不会折叠