博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则写计算器
阅读量:5346 次
发布时间:2019-06-15

本文共 2264 字,大约阅读时间需要 7 分钟。

使用正则编写一个计算器

之前看到网上有很多网友在问正则表达式去编写计算器的代码,也有很多网友放出了自己的代码,所以利用空闲时间

自己也写了一个,时间匆忙可能代码有些小瑕疵不排除会有bug. 还是那句话进攻参考:

import reunm="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)            breakdef 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 kmultiplication(unm)

转载于:https://www.cnblogs.com/lijian-22huxiaoshan/p/7171942.html

你可能感兴趣的文章
springboot中文官方文档
查看>>
lamdba表达式
查看>>
ThreadLocal实现线程范围内共享
查看>>
多校HDU5723 最小生成树+dfs回溯
查看>>
ASP.NET MVC分页实现之改进版-增加同一个视图可设置多个分页
查看>>
关于ASP.NET MVC开发设计中出现的问题与解决方案汇总 【持续更新】
查看>>
关于Entity Framework中的Attached报错的完美解决方案终极版
查看>>
Selenium之Web页面滚动条滚操作
查看>>
组合数据类型练习,英文词频统计实例上
查看>>
Uber回馈开源的一些软件
查看>>
day 3 修改haproxy.cfg 作业
查看>>
UIScrollView —— 缩放实现案例(二)
查看>>
【Qt】Qt Linguist介绍【转】
查看>>
sim usim Uim 区别
查看>>
网页中插入透明Flash的方法和技巧
查看>>
动态内存申请函数选择(realloc、malloc 、alloca、 calloc)
查看>>
获取元素属性get_attribute
查看>>
视觉设计师的进化
查看>>
Python/jquery
查看>>
WPF之Binding
查看>>