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

用正则表达式实现的计算器

时间:2018-06-24 23:53:58      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:思考   收获   float   主函数   时间   new   hide   TE   爬虫   

前面我们有讲到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)
View Code

当然还有很多种,实现方法,还可以写好处理不同运算符号,然后对应不同的函数。emmmm,有时间我会补充在后面的,计算器还是比较简单,只要你去写了,去实现了还是会有很大的收获的。

用正则表达式实现的计算器

标签:思考   收获   float   主函数   时间   new   hide   TE   爬虫   

原文地址:https://www.cnblogs.com/zzqit/p/9222119.html

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