Python__计算器

 1 #Author wangmengzhu
 2 import re
 3 def cheng_and_chu(arg):
 4     val = arg[0]
 5     mch = re.search('d+.*d*[*/]+[+-]?d+.*d*', val)
 6     if not mch:
 7         return
 8     content = re.search('d+.*d*[*/]+[+-]?d+.*d*', val).group()
 9     if len(content.split('*'))>1:
10         n1,n2 = content.split('*')
11         value = float(n1) * float(n2)
12     else:
13         n1,n2 = content.split('/')
14         value = float(n1) / float(n2)
15     qianzhui,houzhui = re.split('d+.*d*[*/]+[+-]?d+.*d*', val, 1)
16     new_str = "%s%s%s"%(qianzhui,value,houzhui)
17     arg[0] = new_str
18     cheng_and_chu(arg)
19 
20 def jia_and_jian(arg):
21     while True:
22         if arg[0].__contains__('+-') or arg[0].__contains__("++") or arg[0].__contains__('-+') or arg[0].__contains__("--"):
23             arg[0] = arg[0].replace('+-','-')
24             arg[0] = arg[0].replace('++','+')
25             arg[0] = arg[0].replace('-+','-')
26             arg[0] = arg[0].replace('--','+')
27         else:
28             break
29     if arg[0].startswith('-'):
30         arg[1] += 1
31         arg[0] = arg[0].replace('-','&')
32         arg[0] = arg[0].replace('+','-')
33         arg[0] = arg[0].replace('&','+')
34         arg[0] = arg[0][1:]
35     val = arg[0]
36     mch = re.search('d+.*d*[+-]{1}d+.*d*', val)
37     if not mch:
38         return
39     content = re.search('d+.*d*[+-]{1}d+.*d*', val).group()
40     if len(content.split('+'))>1:
41         n1, n2 = content.split('+')
42         value = float(n1) + float(n2)
43     else:
44         n1, n2 = content.split('-')
45         value = float(n1) - float(n2)
46     before, after = re.split('d+.*d*[+-]{1}d+.*d*', val, 1)
47     new_str = "%s%s%s" % (before,value,after)
48     arg[0] = new_str
49     jia_and_jian(arg)
50 
51 def cal(sr):
52     new_sr = [sr.strip('()'),0]
53     cheng_and_chu(new_sr)
54     jia_and_jian(new_sr)
55     res = float(new_sr[0])
56     return res
57 
58 def basket(sr):
59     flag = True
60     while flag:
61         m = re.search("([^()]+)",sr)
62         if m:
63             sub_sr = m.group()
64             sub_res = cal(sub_sr)
65             sr = sr.replace(m.group(),str(sub_res))
66         else:
67             print('结果:',cal(sr))
68             flag = False
69 
70 if __name__ == "__main__":
71     print("----------欢迎使用计算器----------")
72     while True:
73         flag = True
74         sr = input("输入要计算的函数(q:退出):")
75         sr = re.sub("s*","",sr)
76         error = re.search('[0-9*/-+]',sr)
77         while flag:
78             if not error:
79                 print("输入有误")
80                 sr = input("请重新输入要计算的函数(q:退出):")
81             else:
82                 if error.group() == 'q':
83                     exit("感谢使用,再见")
84                 basket(sr)
85                 flag = False
原文地址:https://www.cnblogs.com/wangmengzhu/p/7325812.html