Python实现简单的计算器

Python实现简单的计算器,第1张

概述废话写在前面: 本人小白初学Python,个人觉得自学编程有些知识点或是语法看的时候很明白,然鹅过了几天不用就会忘,所以打算做点儿小项目来加深印象以便把知识点记牢。 如果只是无脑的照着别人的代码敲,慢慢你会发现其实并没有什么卵用,你只是把代码敲上去了但是却不懂别人为什么要这么写。 自己如果一点儿都不动脑思考那是不行的,当一个具体的需求拿出来让你去实现的时候,你就会发现一点儿思路也没有。 自学最好是 @H_@R_502_6940@_1@

废话写在前面:

本人小白初学Python,个人觉得自学编程有些知识点或是语法看的时候很明白,然鹅过了几天不用就会忘,所以打算做点儿小项目来加深印象以便把知识点记牢。

如果只是无脑的照着别人的代码敲,慢慢你会发现其实并没有什么卵用,你只是把代码敲上去了但是却不懂别人为什么要这么写。

自己如果一点儿都不动脑思考那是不行的,当一个具体的需求拿出来让你去实现的时候,你就会发现一点儿思路也没有。

自学最好是自己找个小需求来实现一下,在实现的过程中就会遇到很多问题,这个时候首先找出问题出现在哪里,然后一步一步调试解决问题,最后最后一定要记录整理。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

简单计算器开发需求:

实现简单的加减乘除运算,以及带括号的优先级解析,并能输出正确的计算结果。

参考Alex大哥的:教学项目之-通过Python实现简单的计算器

 

分析:

1.首先需要检测用户的输入是否合法,如括号匹配问题

2.由于输入的是字符串,所以需要进行字符串解析,解析出" + - * / ( ) "等符号

3.优先级解析,先计算括号里的内容,在计算乘除运算,最后算加减

 

  1 #! -*- Coding utf-8 -*-  2 #! @Time   :$[DATE] $[TIME]  3 #! @Author :gg  4   5 import re  6   7 def comupute_mut_and_div(formula):  8     ‘‘‘算乘除‘‘‘  9     operators = re.findall("[*/]",formula) 10     calc_List = re.split("[*/]",formula) 11     res = None    # 细节赋值,第一遍for循环轮空 12     for index,i in enumerate(calc_List): 13         if res:    # 第一次这里不执行,所以列表索引不会超出范围 14             if operators[index-1] == "*": 15                 res *= float(i) 16             elif operators[index-1] == "/": 17                 res /= float(i) 18         else: 19             res = float(i) 20     print("3[31;1m[%s]运算结果=3[0m" % formula,res) 21     return res 22  23 def handle_special_sign(plus_and_sub_operators,mul_and_div): 24     """ 25     有时会遇到这种情况:1-2*-2/1 26     plus_and_sub_operators:[‘-‘,‘-‘] 27     mul_and_div:[‘1‘,‘2*‘,‘2/1‘] 28     :param plus_and_sub_operators: 29     :param mul_and_div: 30     :return: 31     """ 32     for index,i in enumerate(mul_and_div): 33         i = i.strip() 34         if i.endswith("*") or i.endswith("/"): 35             mul_and_div[index] = mul_and_div[index] + plus_and_sub_operators[index] + mul_and_div[index+1] 36             del mul_and_div[index+1] 37             del plus_and_sub_operators[index] 38     return plus_and_sub_operators,mul_and_div 39  40 def handle_minus_inList(operators_List,calc_List): 41     """ 42     处理加减带负号的运算,1--4 = 1-(-4) = 1+4 43     operators_List: [‘-‘] 44     calc_List: [‘1‘,‘‘,‘4.0‘] 45     :param operators_List: 46     :param calc_List: 47     :return: 48     """ 49     for index,i in enumerate(calc_List): 50         if i == ‘‘: 51             calc_List[index+1] = "-" + calc_List[index+1] 52             del calc_List[index] 53     return operators_List,calc_List 54  55 def compute(formula): 56     ‘‘‘ 57     解析字符串 58     :param formula: 输入的为字符串 59     :return: 计算结果 60     ‘‘‘ 61     formula = formula.strip("()")  # 去括号,这里是(1+2-2*3+3/6) 62     plus_and_sub_operators = re.findall("[+-]",formula) 63     mul_and_div = re.split("[+-]",formula)  # 取出乘除公式 64  65     plus_and_sub_operators,mul_and_div = handle_special_sign(plus_and_sub_operators,mul_and_div) 66     for i in mul_and_div: 67         if len(i) > 1: 68             print(i) 69             res = comupute_mut_and_div(i) 70             formula = formula.replace(i,str(res)) 71         else: 72             continue 73     calc_List = re.split("[+-]",formula)  # 去除乘除公式 74     plus_and_sub_operators,calc_List = handle_minus_inList(plus_and_sub_operators,calc_List) 75     total_res = None 76     for index,i in enumerate(calc_List): 77         if total_res: 78             if plus_and_sub_operators[index - 1] == "-": 79                 total_res -= float(i) 80             elif plus_and_sub_operators[index - 1] == "+": 81                 total_res += float(i) 82         else: 83             total_res = float(i) 84     print("3[32;1m[%s]运算结果:3[0m" % formula,total_res) 85     return total_res 86  87 def calc(formula): 88     ‘‘‘去括号‘‘‘ 89     brackets_flag = True 90     while brackets_flag: 91         m = re.search("\([^()]*\)",formula)   92         if m: 93             sub_res = compute(m.group())    # 替换 94             formula = formula.replace(m.group(),str(sub_res)) 95         else: 96             print("最终结果:",compute(formula)) 97             brackets_flag = False 98  99 if __name__ == __main__:100     # formula = "-1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))"101     formula = input("请输入:")102     calc(formula)

 

这里没有实现输入非法检测,其他的都实现了,主要用的是正则表达式的提取、替换和分割,以及在for循环中使用enumerate函数。

后续再更新,完善其他更高级的运算以及图形界面显示。

总结

以上是内存溢出为你收集整理的Python实现简单的计算器全部内容,希望文章能够帮你解决Python实现简单的计算器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1195623.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存