python计算器_Python实现的复杂的计算器的代码

用Python实现复杂的计算器,可以按照“()”、乘除、加减的优先级进行混合运算。主旨是对正则表达式进行学习。

设计思路:

1.在计算式中搜索最后一个“(”,再搜索和它匹配的“)”,截取两个括号间的表达式cul。

2.乘除的优先级高,循环搜索cul内的乘除号,进行计算后进行加减计算,得到结果ans。

3.用ans替换“(cul)”,重新搜索括号,知道将输入的公式简化成没有括号的四则运算。

4.对最后的四则运算计算结果。流程图如下:

1415597-20181123235921669-1956360092.jpg

设计时的注意事项:

1.在简化计算式过程中,如3*(1-3),简化后为3*-2,在进行乘运算的时候会报错。解决措施为将乘数前的负号移至被乘数前。将算术式更换为-3*2。除法也用相同的方法处理。

2.在出现“--”或“+-”的时候,可以把“--”替换成“+”,把“+-”替换成“-”。

代码分析:

代码的结构是这样的:

1415597-20181124000955771-1541654437.jpg

执行文件其实没啥说的!

1 importos,sys2 BASE_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))3 print(BASE_dir)4 sys.path.append(BASE_dir)5 from core importmain6 if __name__ == '__main__':7 main.run()

calculato.py就是将文件路径添加到环境变量中

1 importre2 defmul(processor):      #乘运算3 a = re.search(r"(\d+)?[.]?(\d+)[*]", processor).group()[:-1]4 b = re.search(r"[*]\d+[.]?(\d+)?", processor).group()[1:]5 ans = float(a) *float(b)6 ans =str(ans)7 processor_past = re.sub(r"\d+[.]?(\d+)?[*]\d+[.]?(\d+)?", ans, processor, count=1)8 returnprocessor_past9 defdiv(processor):     #除运算10 a = re.search(r"(\d+)?[.]?(\d+)[/]", processor).group()[:-1]11 b = re.search(r"[/]\d+[.]?(\d+)?", processor).group()[1:]12 ans = float(a) /float(b)13 ans =str(ans)14 processor_past = re.sub(r"\d+[.]?(\d+)?[/]\d+[.]?(\d+)?", ans, processor, count=1)15 returnprocessor_past16 defadd(processor):      #加运算17 a=re.search("(\d+)?[.]?(\d+)[+]",processor).group()[:-1]18 b=re.search("[+]\d+[.]?(\d+)?",processor).group()[1:]19 ans = float(a)+float(b)20 ans =str(ans)21 processor_past = re.sub(r"\d+[.]?(\d+)?[+]\d+[.]?(\d+)?",ans,processor,count=1)22 returnprocessor_past23 defsub(processor):      #减运算24 a=re.search("\d+[.]?(\d+)?[-]",processor).group()[:-1]25 b=re.search("[-]\d+[.]?(\d+)?",processor).group()[1:]26 ans = float(a)-float(b)27 ans =str(ans)28 processor_past = re.sub(r"\d+[.]?(\d+)?[-]\d+[.]?(\d+)?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值