zoukankan      html  css  js  c++  java
  • python 计算器的(正则匹配+递归)

    经过2天的长时间的战斗,python计算器终于完成了。

     1 import re
     2 val="1-2*((60-30*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))"
     3 def chen(arg):
     4     f = arg
     5 #    print (f)
     6     if "*" in arg or "/" in arg:
     7         '''如果包含*号或者除好则进如该方法'''
     8         b2_2 = re.search("d+.?d*[*/]+-?d+.?d*", arg)
     9         m = b2_2.group()
    10         k = re.split("([*/])", m, 1)
    11         kn = k[0] + '\' + k[1] + k[2]
    12         if k[1] == '*':
    13            new_a = float(k[0]) * float(k[2])
    14            f = re.sub(kn, str(new_a), arg)
    15            new_z = chen(f)
    16            return new_z
    17         elif k[1] == '/':
    18            new_a = float(k[0]) / float(k[2])
    19            f = re.sub(kn, str(new_a), arg)
    20            new_z = chen(f)
    21            return new_z
    22     elif re.match("-+d+.?d*[+-]+d+.?d*",arg):
    23         '''如果是负数的减法则进如该方法'''
    24         m = re.search("-+d+.?d*[+-]+d+.?d*", arg).group()
    25         k = re.split("([+-])", m, 1)
    26         kt =re.split("([+-])", m, 2)
    27         kn = k[0] + '\' + k[1] + k[2]
    28         aa = "%s%s" %(kt[1],kt[2])
    29         if kt[3] == '-':
    30             new_a = float(aa) - float(kt[4])
    31             f = re.sub(kn, str(new_a), arg)
    32             new_z = chen(f)
    33             return new_z
    34     elif re.search("d+.?d*[+-]+d+.?d*", arg):
    35         '''如果是 加号和减号则进如该方法'''
    36 #        b2_2 = re.search("d+.*d*[+-]+d+.*d*", arg)
    37         b2_2 = re.search("d+.?d*[+-]+d+.?d*", arg)
    38         m = b2_2.group()
    39         k = re.split("([+-])", m, 1)
    40         kn = k[0] + '\' + k[1] + k[2]
    41        # print (k)
    42         if k[1] == '+':
    43             new_a = float(k[0]) + float(k[2])
    44             f = re.sub(kn, str(new_a), arg)
    45             new_z = chen(f)
    46             return new_z
    47         elif k[1] == '-':
    48             new_a = float(k[0]) - float(k[2])
    49             f = re.sub(kn, str(new_a), arg)
    50             new_z = chen(f)
    51             return new_z
    52     return f
    53 
    54 #b = re.split("(([^()]+))",val,1)
    55 while True:
    56     b = re.split("(([^()]+))", val, 1)
    57     if len(b) == 3:
    58     #    print (b)
    59         a1,a2,a3=b
    60         chen1=chen(a2)
    61         val = "%s%s%s" %(a1,chen1,a3)
    62     else:
    63         val=chen(val)
    64         print (val)
    65         break
  • 相关阅读:
    radio checkbox select
    easyui_tree
    MySQL编码问题
    Django shell调试
    encode,decode
    结束进程
    Django models 字段
    re
    (转)为Ubuntu安装翻译词典(星际译王)
    python3进阶之正则表达式之基本概念
  • 原文地址:https://www.cnblogs.com/cp-miao/p/5580746.html
Copyright © 2011-2022 走看看