正则计算器2

Posted 人无远虑

tags:

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

 1 import sys
 2 import re
 3 
 4 def deal_fuhao(calc_list):
 5     new_calc_list=[]
 6     for index,item in enumerate(calc_list):
 7         if item.strip().endswith(*) or item.strip().endswith(/):
 8             new_calc_list.append(%s-%s%(calc_list[index],calc_list[index+1]))
 9         elif (*or/) in item:
10             new_calc_list.append(item)
11     print(new_calc_list)
12     return new_calc_list
13 
14 def jianfa(formula):
15     print(运算,formula)
16     print(formula)
17     formula = formula.replace(+-, "-")
18     formula = formula.replace(++, "+")
19     formula = formula.replace(-+, "-")
20     formula = formula.replace(--, "+")
21 
22     calc_list=re.split([+-],formula)
23     sub_calc_list = re.findall([+-], formula)
24     print(calc_list,sub_calc_list)
25     sub_res=None
26     for index,item in enumerate(calc_list):
27         if sub_res: #这不是第一次
28             if sub_calc_list[index-1]=="-":
29                 sub_res -= float(item)
30             else:
31                 sub_res += float(item)
32         else:
33             sub_res=float(item) #这里其实就是赋值,然后用于上边的计算
34     print(\033[31;1m[%s]\033[0m %sub_res)
35     print(eval(formula))
36 def chengchu(formula):
37     print(运算,formula)
38     calc_list=re.split([+-],formula)
39     calc_list =deal_fuhao(calc_list)
40     print(calc_list)
41 
42     for item in calc_list:
43         sub_calc_list=re.split([*/],item)
44         sub_operator_list=re.findall([*/],item)
45         print(sub_calc_list,sub_operator_list)
46         sub_res=None
47         for index,i in  enumerate(sub_calc_list):
48             if sub_res: #这不是第一次
49                 if sub_operator_list[index-1]==*:
50                     sub_res *= float(i)
51                 else:
52                     sub_res /= float(i)
53             else:
54                  sub_res = float(i)
55 
56         print(\033[31;1m[%s]=\033[0m%item,sub_res)
57         formula = formula.replace(item,str(sub_res))
58 
59     print(\033[31;1m[%s]结果\033[0m,formula)
60     res_zuizhong =jianfa(formula)
61 
62 def calc(formula):
63     parentheses_flag = True
64     while parentheses_flag:
65         m=re.search(\([^()]+\),formula)
66         if m:
67             print(m.group())
68             sub_formula=m.group().strip(())
69             sub_res=chengchu(sub_formula)
70         break
71 
72 if __name__==__main__:
73     formula = 1-2*(60-30+ (-40.0/5*(9-2*5/-3+7/3*99/4*2998+10*568/14)))-(-4*3)/(16-3*2)
74     res = calc(formula)
技术分享图片
 1 C:\Users\qiangql\AppData\Local\Programs\Python\Python36-32\python.exe C:/Users/qiangql/PycharmProjects/untitled1/计算器2.py
 2 (9-2*5/-3+7/3*99/4*2998+10*568/14)
 3 运算 9-2*5/-3+7/3*99/4*2998+10*568/14
 4 [2*5/-3, 7/3*99/4*2998, 10*568/14]
 5 [2*5/-3, 7/3*99/4*2998, 10*568/14]
 6 [2, 5, -3] [*, /]
 7 [2*5/-3]= -3.3333333333333335
 8 [7, 3, 99, 4, 2998] [/, *, /, *]
 9 [7/3*99/4*2998]= 173134.50000000003
10 [10, 568, 14] [*, /]
11 [10*568/14]= 405.7142857142857
12 [%s]结果 9--3.3333333333333335+173134.50000000003+405.7142857142857
13 运算 9--3.3333333333333335+173134.50000000003+405.7142857142857
14 9--3.3333333333333335+173134.50000000003+405.7142857142857
15 [9, 3.3333333333333335, 173134.50000000003, 405.7142857142857] [+, +, +]
16 [173552.54761904766]
17 173552.54761904766
18 
19 Process finished with exit code 0
运算结果

 

以上是关于正则计算器2的主要内容,如果未能解决你的问题,请参考以下文章

text 正则表达式片段

markdown 正则表达式模式片段

js正则验证,邮箱,身份证

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

Python使用正则表达式实现计算器练习

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销