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

正则计算器2

时间:2018-04-24 13:57:23      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:users   one   bre   arm   data   style   eal   分享图片   replace   

 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

标签:users   one   bre   arm   data   style   eal   分享图片   replace   

原文地址:https://www.cnblogs.com/PYlog/p/8929004.html

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