• 正则写计算器


    使用正则编写一个计算器

    之前看到网上有很多网友在问正则表达式去编写计算器的代码,也有很多网友放出了自己的代码,所以利用空闲时间
    自己也写了一个,时间匆忙可能代码有些小瑕疵不排除会有bug. 还是那句话进攻参考:

    import re
    unm="1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14) ) - (-4*3)/ (16-3*2) )"
    unm=unm.replace(" ","")
    def multiplication(unm2):                #第一步去除括号
        tag=True
        while tag:
            if re.search("([^()]+)+",unm2) and tag:
                ret=re.search("([^()]+)",unm2)        #将括号过滤出来
                ret1=ret.group()
                ret2=re.search("[^()]+",ret1)
                ret3=ret2.group()
                p=kuohao(ret3)                           #括号去除后交给乘除法函数
                p=str(p)
                unm2=unm2.replace(ret1,p)
            else:
                p=kuohao(unm2)
                print(p)
                break
    def kuohao(k):     #乘除法的运算
        tag=True
        while tag:
            if re.search("(?:d+)?.?d+?[*|/](-|+)?(?:d+)?.?(?:d+)?",k) and tag:
                ret=re.search("(?:d+)?.?d+?[*|/](-|+)?(?:d+)?.?(?:d+)?",k)
                ret1=ret.group()
                if "/" in ret1:
                    j=re.split("/",ret1)
                    o=float(j[0])/float(j[1])                        #运算的结果
                    o=str(o)
                    k=k.replace(ret1,o)        #将运算结果替换至未运算之前
                elif "*" in ret1:
                    j=re.split("*",ret1)
                    o=float(j[0])*float(j[1])
                    o=str(o)
                    k=k.replace(ret1,o)
            else:
                add_subtract(k)
                return (add_subtract(k))
    def add_subtract(k):      #加减法运算(最终的结果)
        tag=True
        while tag:
          k=re.sub("--","+",re.sub("++","+",re.sub("-+","-",re.sub("+-","-",k))))  #将重复的加减运算符替换
          if re.search("(?:d+)?.?d+?[-](?:d+)?.?(?:d+)?",k) and tag:
                ret=re.search("(?:d+)?.?d+?[-](?:d+)?.?(?:d+)?",k)
                ret1=(ret.group())
                j=re.split("-",ret1)
                o=float(j[0])-float(j[1])
                o=str(o)
                k=k.replace(ret1,o)
          elif re.search("(?:d+)?.?d+?[+](?:d+)?.?(?:d+)?",k) and tag:
                ret=re.search("(?:d+)?.?d+?[+](?:d+)?.?(?:d+)?",k)
                ret1=(ret.group())
                j=re.split("+",ret1)
                o=float(j[0])+float(j[1])
                o=str(o)
                k=k.replace(ret1,o)
          else:
              return k
    multiplication(unm)
    
    
  • 相关阅读:
    关于 Android 进程保活,你所需要知道的一切【转】
    android 按返回键最小化(后台运行)
    android notification完全解析【转】
    使用WakeLock使Android应用程序保持后台唤醒
    [Linux]Vim基本操作
    [STL]map的使用
    [python]使用python进行LINUX系统操作
    python challenge 2:迭代与列表
    python challenge 1、3:字符串处理
    python challenge 0:操作符与内建函数
  • 原文地址:https://www.cnblogs.com/lijian-22huxiaoshan/p/7171942.html
Copyright © 2020-2023  润新知