python简易计算器心得体会_[原创]python之简单计算器(超详解,只有基本功能+-*/,还有括号处理)...

不想看过程的话,直接看文章最后的正式源码

作业需求及分析:

1038183-20161021012631154-717468054.png

流程图

https://www.processon.com/diagraming/580c5276e4b03c844a5a9716

1038183-20161023145342623-2054479673.png

初期感受

今天10/23,这个作业是我19号拿到的,当时一脸蒙逼,知道么?这里我不可能不可能做出来的感觉!!!

觉得不可能不是没有理由的,

1. 有多括号要怎么区配出最里面那个?? 虽然我前两篇博文有写关与正则表达式的,但还是不会。

2.输入的可是字符串字符串啊

3.如何加减乘除

4.如何先乘除,后加减

实际上遇到比这些还多,但现在就只记起这些……

分析需求:

1.先判断有无括号,无括号直接+-*/

2.有括号先提取出最里面的括号(利用正则表达式)

3.括号外面还有括号怎么办?我这里是用迭代,直到没有括号

4.没有括号,再传给1处理,OK ,搞定

我不会,但我可以去我别人的博客么,但我也看不懂……

妈的,这怎么行!

先写加减乘除,试试吧

1 def mul_mov(s):2 result = 0

3 if s[1] == '*':4 result = int(s[0]) * int(s[2])5 elif s[1] == '/':6 result = float(s[0]) / int(s[2])7 result = int(result)8

9 for i in range(3): # 去掉前三个10 s.remove(s[0])11

12 s.insert(0, result) #局部变量引用赋值前的结果13

14 if len(s) == 1:15 print(result)16 else:17 mul_mov(s)18

19

20 def main():21 choose = input("请选择:1.加减;2.乘除")22 num = input("please input:")23 if choose == '1':24 sa = re.split(r'(\D)', num)25 add_substract(sa)26 elif choose == '2':27 sa = re.split(r'(\D)', num)28 mul_mov(sa)29

30

31 if __name__=="__main__":32 main()

大概花了半个晚上,死活总算是搞出来了!

但这样肯定还有问题。我当时是这样想的:

#问题:让用户选择1,2不现实,如何让用户输入然后自动加减乘除

#思考:现在已经能够处理,单个的加减或乘除

#可否在混合中先分组出(乘除) eg: ['8+9+','9*4/3','-','4*2‘,‘+5-2’]

#这样可以处理乘除,如何分组呢??

再后来,我卡住了,我回去看我写正则表达式的文章一遍双一遍,还是想不出怎么分组? 感觉太难了,

eg: ['8+9+','9*4/3','-','4*2‘,‘+5-2’] 如何单独的匹配出'9*4/3' ??

PS:如果大神你知道,可以评论和我说下,谢谢!

卡住怎么办?我+-*/乘除都做出来了,肯定不能就此打住的。

于是我打别人的博客看,终于找到一篇我看得懂看得懂的了!!http://www.cnblogs.com/loyfee/p/5764926.html#3538071

参考代码

ContractedBlock.gif

ExpandedBlockStart.gif

#coding:utf-8

#将输入的字符串格式统一转换成列表,将数字、符号、括号都成一个独立元素,#如: 12+3*(14+5) ----> ["12","+","3","*","(","14","+","5",")"]

defformat_input(input_re_value):

input_re_value= input_re_value.replace(" ","")

format_list=[]for i ininput_re_value:

format_list.append(i)

snum=0while 1:try:ifformat_list[snum].isnumeric():if format_list[snum+1].isnumeric():

format_list[snum]= format_list[snum] + format_list[snum+1]

format_list.pop(snum+1)else:

snum+= 1

else:

snum+= 1

exceptIndexError:returnformat_listbreak

#计算没有括号的列表的值。

defcomput(re_value):while "*" in re_value or "/" inre_value:for i,j inenumerate(re_value):if j == "*":

re_cheng= float(re_value[i-1])*float(re_value[i+1])

re_value.pop(i-1)

re_value.pop(i-1)

re_value.pop(i-1)

re_value.insert(i-1,re_cheng)if j == "/":

re_chu= float(re

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值