欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

计算器程序

程序员文章站 2022-03-20 19:26:15
1 import re 2 3 #处理表达式 将+-替换成- --替换成+ 4 def dealwith(express): 5 express = express.replace('+-','-') 6 express = express.replace('--','+') 7 return ex ......
计算类似这样的表达式
1 - 2 *((6 0 - 3 0 +(-40/5)*(9-2*5/3 + 7/3*99/4*2998 +10 *568/14)) - (-4*3)/(16-3*2))

提示:
1.去空格
2.用正则匹配最简式子
3.计算结果去替换原式
4.while 循环
计算器程序
 1 import re
 2 
 3 #处理表达式 将+-替换成- --替换成+
 4 def dealwith(express):
 5     express = express.replace('+-','-')
 6     express = express.replace('--','+')
 7     return express
 8 #计算
 9 def cal_exp_son(exp_son):
10     #用来计算原子型表达式  两个数之间的乘除法
11     if '/' in exp_son:
12         a,b = exp_son.split('/')
13         return str(float(a)/float(b))
14     elif '*' in exp_son:
15         a,b = exp_son.split('*')
16         return str(float(a)*float(b))
17 
18 def cal_express_no_bracket(exp):
19     # 计算没有括号的表达式
20     # exp是没有经过处理的最内层带括号的表达式
21     while true:
22         exp = exp.strip('()')
23         #先乘除后加减
24         ret = re.search('\d+\.?\d*[*/]-?\d+\.?\d*',exp)
25         if ret:
26             exp_son = ret.group()
27             ret = cal_exp_son(exp_son)
28             exp= exp.replace(exp_son,ret)
29             exp =dealwith(exp)
30         else:
31             ret =re.findall('-?\d+\.?\d*',exp)
32             sum=0
33             for i in ret:
34                 sum +=float(i)
35             return str(sum)
36 
37 def remove_bracket(new_express):
38 #提取括号里没有其他括号的表达式
39     while true:
40         ret = re.search('\([^()]+\)',new_express)
41         if ret:
42             express_no_bracket = ret.group()
43             print('匹配到内部不在有括号的值:',express_no_bracket)
44             ret = cal_express_no_bracket(express_no_bracket)
45             new_express = new_express.replace(express_no_bracket,ret)
46             new_express = dealwith(new_express)
47             print(new_express)
48         else:
49             print('表达式中已经没有括号了:',new_express)
50             ret = cal_express_no_bracket(new_express)
51             return ret
52 
53 express = '1 - 2 *((6 0 - 3 0  +(-40/5)*(9-2*5/3  + 7/3*99/4*2998 +10 *568/14)) - (-4*3)/(16-3*2))'
54 # 去空格
55 new_express = express.replace(' ','')
56 print(new_express)
57 ret = remove_bracket(new_express)
58 print(ret)
view code