文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

计算器程序

2023-01-30 23:37

关注
计算类似这样的表达式
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

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯