• 计算器-- 利用re模块 利用函数封装 第二版


     1 import re
     2 remove_parentheses = re.compile('([^()]+)')
     3 
     4 def Remove_Parentheses(obj, s):  # 找到内层的括号并且返回单个括号
     5     while obj.search(s):
     6         ret = obj.search(s).group()
     7         if ('*'in ret) or ('/' in ret):  # 判断括号里是否有乘法 除法
     8             ret1 = ride_div(ret)      # 有则调用 ride_div() 函数
     9             s = s.replace(ret, ret1)    # 把乘法后的返回值进行重新赋值, 在乘法的函数里 还调用了加减法的函数, 详情看往下看.
    10         else:
    11             ret2 = add_sub(ret)      # 若没有 乘除法 则直接调用 加减法的函数 add_sub()
    12             s = s.replace(ret, ret2)    #把加减法后的返回值 重新赋值.
    13     return s
    14 
    15 
    16 def ride_div(s):  # 求乘除法的值
    17     while re.search('d+(.d+)?[*/]-?d+(.d+)?', s):   #用 search判断 若不是None则继续进行
    18         minus(s)                          # 此函数是为了把 -- -+ +- ++ 替换成 单个的
    19         ret = re.search('d+(.d+)?[*/]-?d+(.d+)?', s).group()  
    20         a, d ,b = re.split('([/*])', ret)
    21         if d == '*':
    22             sum = float(a) * float(b)
    23             s = s.replace(ret, str(sum))      # 把得到的积 重新赋值
    24         elif d == '/':
    25             sum = float(a) / float(b)
    26             s = s.replace(ret, str(sum))       # 把得到的商 重新赋值
    27     else:
    28         ret_new = add_sub(s)            # 此处是为了当while 条件为None时 调用加减法, 把值相加或相减
    29     return ret_new.strip('(').strip(')')  # 最后得到一个数字 进行返回
    30 
    31 
    32 
    33 def add_sub(s): # 求加减的值
    34     while re.search('-?d+(.d+)?[+-]-?d+(.d+)?', s):
    35         s = minus(s)
    36         ret = re.search('(?P<a>-?d+(.d+)?)(?P<d>[+-])(?P<b>-?d+(.d+)?)', s)   # 此处,因为用切割的话 会有bug, 所以选择了用 分组的命名
    37         a = ret.group('a')
    38         d = ret.group('d')
    39         b = ret.group('b')
    40         if d == '+':
    41             sum = float(a) + float(b)
    42         elif d == '-':
    43             sum = float(a) - float(b)
    44         s = s.replace(ret.group(0), str(sum))
    45     s = s.strip('(').strip(')')
    46     return s
    47 
    48 
    49 def minus(s):   #更改 不和谐的 符号
    50     while ('--' in s) or ('-+' in s) or ('+-' in s) or ('++' in s) :
    51         s = s.replace('--','+')
    52         s = s.replace('-+','-')
    53         s = s.replace('+-','-')
    54         s = s.replace('++','+')
    55     return s
    56 
    57 
    58 def main():  # 主函数
    59     while 1:
    60         s = input('请输入你要计算的式子,输入回车退出程序:').strip().replace(' ', '')
    61         if not s:
    62             break
    63         if "(" in s:
    64             ret1 = Remove_Parentheses(remove_parentheses, s)
    65             ret2 = ride_div(ret1)
    66             ret3 = add_sub(ret2)
    67             print(ret3)
    68         else:
    69             ret2 = ride_div(s)
    70             ret3 = add_sub(ret2)
    71             print(ret3)
    72 
    73 main()
  • 相关阅读:
    ie firefox兼容性总结
    [软件推荐]Metalogix Migration Manager 3.1SharePoint第3方管理软件
    MOSS Query Tool
    sharepoint 特别信息 自个乐去吧~~
    我的迅雷资源博客已经开通!
    VS2007? 爱尝鲜的进来!
    IFrameWebPart For QuickPart 1.0 新鲜出炉,免费品尝,趁热哦~~
    用Mozilla Firefox做客户端,浏览OSS2007站点,兼容性评测!
    转载sharepoint相关资源
    QuickPart VS SmartPart
  • 原文地址:https://www.cnblogs.com/Fushengliangnian/p/9307474.html
Copyright © 2020-2023  润新知