计算器之可计算浮点型,负数和小括号。
接着昨天的整型。整型计算器=??啥都不是。
又来了个新版,与其说是新版,倒不如说是翻版。
直接奉上全部代码,代码边上都有注解
1 import re 2 def size(ch): #定义一个基础的四则运算用于基础计算 3 ch=ch.replace('--','+')#去除两个减号相连 4 list_num=re.findall('(-?\d+\.?\d*|[/*])',ch) #定义一个对象接收所有运算对象包括浮点 5 num=0 6 list_del=[]#基于四则运算的基本原则,不管加减只论乘除,最后结果在列表中相加,减号直接当成数据直接处理 7 for i in list_num: 8 if i=='/'or i=='*':#判断有无乘除 9 if i=='*':#有的话顺序执行乘除 10 list_num[num+1]=str(float(list_num[num-1])*float(list_num[num+1])) 11 elif i=='/': 12 list_num[num+1]=str(float(list_num[num-1])/float(list_num[num+1])) 13 list_del.append(num-1) 14 list_del.append(num)#记录需要删除的前面两个元素 15 num+=1 16 m=0 17 for i in list_del: 18 del list_num[i-m] 19 m+=1#删除时需要自减,不然会重复删除大的数据 20 del list_del #移除空列表 21 sum=0 22 for j in list_num: 23 sum+=float(j) 24 return sum #返回计算好的值 25 while True: 26 date=input('输入计算数字的字符串:') 27 date=date.replace(' ','')#去除输入字符串中的空格 28 date=date.replace('-+','-')#去除-+符号相连 29 if re.search('[a-zA-Z]',date)!=None: #匹配字母 30 print('不能输入字母') 31 else: 32 if len(re.findall('\(',date))!=len(re.findall('\)',date)): #求两匹配列表长度 33 print('输入的左右括号不一致') 34 else: 35 while True: 36 if re.search('\(',date)!=None: 37 date_m=re.search('\([^()]+\)',date).group()#正则匹配最内层括号及内层数据 38 date_x=re.sub('\(|\)','',date_m)#正则匹配去除两边括号 39 date=date.replace(date_m,str(size(date_x)))#将括号里面的字符计算出来并替代原来字符串 40 else: 41 print(size(date))#输出结果 42 break #退出循环
肖cc
QQ2398506993