计算器程序
2019-02-27 11:54:46来源:博客园 阅读 ()
计算类似这样的表达式
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)
原文链接:https://www.cnblogs.com/Jeery/p/10444859.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:time模块
下一篇:Django的模板系统
- python3基础之“术语表(2)” 2019-08-13
- python_公共方法 2019-08-13
- python爬虫学习之用Python抢火车票的简单小程序 2019-08-13
- python变量和常量 2019-08-13
- 进程相关 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash