开发一个简单的python计算器

1.实现加减乘除及拓号优先级解析

2.用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致

 1 import re
 2 def func(a):
 3     while True:
 4         if '*' in a:
 5             c = a.split('*')
 6             if '/' in c[0]:
 7                 a = div(a)
 8             else:
 9                 a = mul(a)
10         elif '/' in a:
11             a = div(a)
12         else:
13             a = add(a)
14             return a
15 def mul(a):
16     b = re.search(r'd+.?d**-?d+.?d*', a)
17     if b:
18         b = b.group()
19         l=b.split("*")
20         c=float(l[0])*float(l[1])
21         res = re.sub(r'd+.?d**-?d+.?d*', str(c), a,1)
22         return res
23 def div(a):
24     b = re.search(r'd+.?d*/-?d+.?d*', a)
25     if b:
26         b = b.group()
27         l=b.split("/")
28         c=float(l[0])/float(l[1])
29         res = re.sub(r'd+.?d*/-?d+.?d*', str(c), a,1)
30         return res
31 def add(a):
32     if '--' in a:
33         a = a.replace('--', '+')
34     b = re.findall(r'-?d+.?d*', a) #把负数两个字符看成一个整体
35     c=0
36     for i in b:
37         c+=float(i)
38     return c
39 def caculate():
40     a = ''.join(input('请输入计算公式(如1-2*((60-30+(-40/5))等此类:').split())#把输入字符串以空格切片然后在拼接
41     while True:
42         if '(' in a:
43             b = re.search(r'(([^()]+))', a)
44             if b:
45                 c = b.group()
46                 d = func(c)
47                 a = re.sub(r'(([^()]+))', str(d), a, 1)
48         else:
49             print(func(a))
50             break
51 caculate()
原文地址:https://www.cnblogs.com/lixiaomingpython/p/6791198.html