加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:18:05 所属栏目:百科 来源:网络整理
导读:前面我们有讲到python中的re模块,当然用到最多的地方还是爬虫,由于还有一个知识点没讲,所以就用re做的一个计算器给大家熟悉re模块。 首先我们应该先梳理一下计算器的实现过程,当然,有几种实现方法。先从最简单的开始讲吧。下面是计算器的思考流程。 1,

前面我们有讲到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,有时间我会补充在后面的,计算器还是比较简单,只要你去写了,去实现了还是会有很大的收获的。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读