zoukankan      html  css  js  c++  java
  • 计算器之可计算浮点型,负数和小括号。

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

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

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

     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   #退出循环
  • 相关阅读:
    Subversion学习笔记
    单元测试 学习笔记 之五
    单元测试 学习笔记 之四
    将全球通讯簿导入pop3客户端联系人
    isa 2006 sp1发布
    使用POWERSHELL管理OCS 2007
    SCCM 2007 排错
    空空排错日志:OCS错误日志14501等解决办法
    在AD没有备份的情况下还原被删除的数据
    冲击波又回来啦?
  • 原文地址:https://www.cnblogs.com/alecc1124/p/11145069.html
Copyright © 2011-2022 走看看