计算器之可计算浮点型,负数和小括号。

接着昨天的整型。整型计算器=??啥都不是。

又来了个新版,与其说是新版,倒不如说是翻版。

直接奉上全部代码,代码边上都有注解

 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   #退出循环

 

转载于:https://www.cnblogs.com/alecc1124/p/11145069.html

你可能感兴趣的:(计算器之可计算浮点型,负数和小括号。)