python编程简易计算器_Python实现简单的计算器

废话写在前面:

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

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

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

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

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

简单计算器开发需求:

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

分析:

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

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

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

1 #! -*- coding utf-8 -*-

2 #! @Time :$[DATE] $[TIME]

3 #! @Author :gg

4

5 importre6

7 defcomupute_mut_and_div(formula):8 '''算乘除'''

9 operators = re.findall("[*/]", formula)10 calc_list = re.split("[*/]", formula)11 res = None #细节赋值,第一遍for循环轮空

12 for index, i inenumerate(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("\033[31;1m[%s]运算结果=\033[0m" %formula, res)21 returnres22

23 defhandle_special_sign(plus_and_sub_operators, mul_and_div):24 """

25 有时会遇到这种情况:1-2*-2/126 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 inenumerate(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 delplus_and_sub_operators[index]38 returnplus_and_sub_operators, mul_and_div39

40 defhandle_minus_inlist(operators_list, calc_list):41 """

42 处理加减带负号的运算,1--4 = 1-(-4) = 1+443 operators_list: ['-']44 calc_list: ['1', '', '4.0']45 :param operators_list:46 :param calc_list:47 :return:48 """

49 for index, i inenumerate(calc_list):50 if i == '':51 calc_list[index+1] = "-" + calc_list[index+1]52 delcalc_list[index]53 returnoperators_list, calc_list54

55 defcompute(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 inmul_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 =None76 for index, i inenumerate(calc_list):77 iftotal_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("\033[32;1m[%s]运算结果:\033[0m" %formula, total_res)85 returntotal_res86

87 defcalc(formula):88 '''去括号'''

89 brackets_flag =True90 whilebrackets_flag:91 m = re.search("\([^()]*\)", formula)92 ifm:93 sub_res = compute(m.group()) #替换

94 formula =formula.replace(m.group(), str(sub_res))95 else:96 print("最终结果:", compute(formula))97 brackets_flag =False98

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函数。

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值