用正则表达式实现的计算器
Posted zzqit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用正则表达式实现的计算器相关的知识,希望对你有一定的参考价值。
前面我们有讲到python中的re模块,当然用到最多的地方还是爬虫,由于还有一个知识点没讲,所以就用re做的一个计算器给大家熟悉re模块。
首先我们应该先梳理一下计算器的实现过程,当然,有几种实现方法。先从最简单的开始讲吧。下面是计算器的思考流程。
1,考虑计算的优先级
()的优先级最高,其次是乘除,最后是加减
2,算最里面括号的值,并代替原括号表达式
3,没有括号的先算乘除,然后算完把最终值,代替成原先表达式
4,没有括号的算完乘除,计算只有加减的表达式,并且把结果代替成原来表达式
5,循环去括号,乘除,加减(在计算过程中记得对--,或者+-等情况的处理)
这是最简单也是最好理解的方法来实现基础的计算器。下面的代码是根据上面的思路写出来的。
1 import re 2 def deal_false(exp): 3 #处理当符号没有省略 4 exp=exp.replace(‘--‘,‘+‘)#把--变为+ 5 exp=exp.replace(‘+-‘,‘-‘)#把+-变为- 6 return exp 7 def deal_bracket(exp): 8 #处理最里面的那一层括号 9 while True: 10 new_exp=re.search(‘([^()]+)‘,exp)#筛选最里层的括号内容 11 if new_exp: 12 new_exp=new_exp.group() 13 res=calculate(new_exp) 14 exp=exp.replace(new_exp,res) 15 exp = deal_false(exp) 16 else: 17 exp = deal_false(exp) 18 res=calculate(exp) 19 exp=exp.replace(exp,res) 20 return exp 21 def calculate(exp): 22 #计算没有括号的式子 23 # exp=exp.strip("()") 24 while True: 25 mul_exp = re.search(‘-?d+.?d*[*/]-?d+.?d*‘, exp)#筛选乘除法表达式 26 if mul_exp: 27 mul_exp =mul_exp.group() 28 res = calculate_mul(mul_exp) 29 exp = exp.replace(mul_exp, res) 30 else: 31 res=calculate_add(exp) 32 exp = exp.replace(exp, res) 33 return exp 34 def calculate_mul(exp): 35 #计算乘法或者除法 36 if ‘*‘ in exp: 37 x,y=exp.split(‘*‘) 38 return str(float(x)*float(y)) 39 elif ‘/‘ in exp: 40 x,y=exp.split(‘/‘) 41 return str(float(x)/float(y)) 42 def calculate_add(exp): 43 #计算只有加减法 44 sum=0 45 exp=re.findall(‘-?d+.?d*‘,exp) 46 for i in exp: 47 sum+=float(i) 48 return str(sum) 49 def main(exp): 50 #主函数,计算机的入口 51 exp=exp.replace(‘ ‘,‘‘)#去掉空格 52 print(deal_bracket(exp)) 53 if __name__ == ‘__main__‘: 54 x=input(">>>>") 55 main(x)
当然还有很多种,实现方法,还可以写好处理不同运算符号,然后对应不同的函数。emmmm,有时间我会补充在后面的,计算器还是比较简单,只要你去写了,去实现了还是会有很大的收获的。
以上是关于用正则表达式实现的计算器的主要内容,如果未能解决你的问题,请参考以下文章