前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >计算器程序

计算器程序

作者头像
py3study
发布2020-01-22 21:22:58
9990
发布2020-01-22 21:22:58
举报
文章被收录于专栏:python3python3
代码语言:javascript
复制
计算类似这样的表达式
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 循环

代码语言:javascript
复制
 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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档