爱根,28行代码版计算器,不知有何纰漏,望大神指正!

 1 # s="1 - 2 * ((60 - 30 + (-40 / 5) * (9 - 2 * 5 / 3 + 7 / 3 * 99 / 4 * 2998 + 10 * 568 / 14)) - (-4 * 3) / (16 - 3 * 2))"
 2 s=input("please input you number str:")
 3 import re
 4 s=s.replace(" ","")
 5 while True:
 6     a=re.search(‘\([^()]+\)‘,s)  #得到带括号的一个算式。
 7     if a !=None:    a=a.group()
 8     if a ==None:    a=s
 9     if len(re.findall("[\+\-]?\d+\.?\d*",a))==1:
10         print(s)
11         break
12     if "/" in a:                             #优先查找/法。乘除前面的符号本来就是归于数字的,所以必须带上负号。
13         b=re.search("(?P<fir>\-?\d+\.?\d*)/(?P<sec>[\+\-]?\d+\.?\d*)",a) #将算式分组,成为两个数字。调用这两个数字进行运算。
14         c=float(b.group("fir"))/float(b.group("sec")) #前面的匹配数字取负不取正,避免脱括号少减号,加+号会消加号,影响计算。
15     elif "*" in a:             #其次是*法。  #而且避免连续出现三个符号,这样是为了约分。
16         b=re.search("(?P<fir>\-?\d+\.?\d*)\*(?P<sec>[\+\-]?\d+\.?\d*)",a)  # 将算式分组,成为两个数字,实质也是约分,取负号。
17         c=float(b.group("fir"))*float(b.group("sec"))  # 调用这两个数字进行运算。
18     elif "+" or "-" in a:
19         b=re.search("(?P<fir>\-?\d+\.?\d*)(?P<sign>[\+\-]+)(?P<sec>\d+\.?\d*)",a)#将算式分组,成为两个数字,前面一个必须带符号。
20         if b.group("sign") =="+-" or b.group("sign") == "-" or b.group("sign") == "-+": #评判符号,减号有三种情况。
21             c=float(b.group("fir"))-float(b.group("sec"))  # 调用这两个数字进行运算。
22         else:c=float(b.group("fir"))+float(b.group("sec"))
23     c=round(c,100)                                          #将c保留100位小数。
24     if float(b.group("fir")) < 0 and float(b.group("sec")) < 0: #这一步非常重要,如果前面的数字只有一个减号的话,会少个加号,
25         c="+%s" % (str(c))          #但是上面匹配加减法的时候,脂批那个是从最左边的位置开始的,所以不必担心。
26     if len(re.findall("[\+\-]?\d+\.?\d*",a))==2:   #如果括号内只剩余两个数字那么就不用再计算了,就将该部分替换为计算结果。
27         s=s.replace(a, str(c),1)              #将括号替换计算结果。返回给s。
28     else:#如果括号内大于两个数字,就将算式替换为计算结果,因为search找到第一个匹配就返回,所以安全起见双重归一,replace也是只替换第一部分。
29         s=s.replace(b.group(),str(c),1)   #将计算式替换为计算结果。返回给s,加1,双重归一,避免乱替换,有减号就麻烦了。
30     # print(s)
31 # 思路:
32 # 1、从最内层括号入手,按照\-->*-->+的方法来进行计算,始终是两个数字在进行计算,直至将里面的算式全部计算完毕。
33 # 2、替换时分为替换括号整体和算式,注意符号的转变,四则运算规则非常重要。
34 # 3、弥补缺陷,就是 * \ 消符号的弊病,此版本输出地结果都带正负号,可以取结果引用再次作为参数。
35 # 4、正则表达式利用search的特性,找到一个就返回值,可以轮番操这个括号内的内容,group的多元化应用。
36 # 5、其实没有用到多少正则表达式的东西,呵呵,还好我又复习了一遍,不然转眼全忘了。
时间: 2024-10-06 16:38:42

爱根,28行代码版计算器,不知有何纰漏,望大神指正!的相关文章

ie6/7下给table的行tr 添加position:relative;的奇特bug,求大神告知

代码: <!DOCTYPE html> <html> <head> <title>ie6/7下给table的行tr 添加position:relative;的奇特bug,求大神告知</title> <style> * { padding: 0; margin: 0; } table tr { position: relative;float:left;overflow:hidden;z-index:1;height:100%;widt

HDU Today(自己的代码不知道哪里错了一直没A抄袭大神的)

http://acm.hdu.edu.cn/showproblem.php?pid=2112 本题题目意思非常简单,麻烦的就是处理一下字符串,这是我能力欠缺的地方 #include<stdio.h>#include<iostream>#include<string.h>#define maxint 200000000int map[201][201],visit[201],n,m,s,e;int dis[202];char name[201][32];int find(

第一行代码

今天看打了一篇推荐<第一行代码 Android>(郭霖),是郭大神的, Android:一 简介 框架 已发布的版本 应用特色 开发环境 程序结构 Logcat工具 二 Activity 什么是活动 活动用法 intent与其用法 生命周期:onCreate() onStart() onPause() onStop() onDestory() onRestart() 活动启动模式:standard singleTop singleTask singleInstance 活动集合三 UI控件 常

大神手把手教你写一个页面模板引擎,只需20行Javascript代码!

只用20行Javascript代码就写出一个页面模板引擎的大神是AbsurdJS的作者,下面是他分享的全文,转需. 不知道你有木有听说过一个基于Javascript的Web页面预处理器,叫做AbsurdJS.我是它的作者,目前我还在不断地完善它.最初我只是打算写一个CSS的预处理器,不过后来扩展到了CSS和HTML,可以用来把Javascript代码转成CSS和HTML代码.当然,由于可以生成HTML代码,你也可以把它当成一个模板引擎,用于在标记语言中填充数据. 于是我又想着能不能写一些简单的代

200行代码实现简版react&#128293;

200行代码实现简版react?? 现在(2018年)react在前端开发领域已经越来越??了,我自己也经常在项目中使用react,但是却总是好奇react的底层实现原理,多次尝试阅读react源代码都无法读下去,确实太难了.前不久在网上看到几篇介绍如何自己动手实现react的文章,这里基于这些资料,并加入一些自己的想法,从0开始仅用200行代码实现一个简版react,相信看完后大家都会对react的内部实现原理有更多了解.但是在动手之前我们需要先掌握几个react相关的重要概念,比如组件(类)

第一行代码 Android 第二版到货啦

今日android第一行代码[第二版]已到,收获的季节到了 先看一下封面 书签: 以后就把空闲时间送给它吧 先来看一下本书的目录: 第1章 开始启程--你的第1行Android代码 第2章 先从看得到的入手--探究活动 第3章 软件也要拼脸蛋--UI开发的点点滴滴 第4章 手机平板要兼顾--探究碎片 第5章 全局大喇叭--详解广播机制 第6章 数据存储全方案--详解持久化技术 第7章 跨程序共享数据--探究内容提供器 第8章 丰富你的程序--运用手机多媒体 第9章 看看精彩的世界--使用网络技术

10行代码教你免费观看无广告版的《庆余年》腾讯视频

1写在前面 本来这周是要发个关于如何用python打造属于自己的iphone快捷方式的,结果因为本周一直沉迷在<庆余年>中不能自拔,所以下周吧! 最近<庆余年>大火的同时,关于腾讯吃相的吐槽也是大火.没钱冲会员,比别人看的晚就算了,2分多钟的广告是真的不能忍,尤其是好不容易广告结束了,还发现这集已经看过了,我去! 那就面对疾风吧! 下面我教大家如何用Python 10行代码,直接在iphone上直接下载<庆余年>视频! 2效果展示 视频下载界面: 下载完成界面: 3如何

Android第一行代码之制作简易版新闻应用

我是跟着<Android第一行代码>写代码的,想写个博来加深印象一点 一.添加依赖库RecyclerView 在app下的build.gradle中的dependencies添加一句:(添加后要sync now) implementation 'androidx.recyclerview:recyclerview:1.0.0' 二.新建一个新闻类News.java 1 public class News { 2 private String title;//新闻标题 3 private Str

如何用Python统计《论语》中每个字的出现次数?10行代码搞定--用计算机学国学

编者按: 上学时听过山师王志民先生一场讲座,说每个人不论干什么,都应该学习国学(原谅我学了计算机专业)!王先生讲得很是吸引我这个工科男,可能比我的后来的那些同学听课还要认真些,当然一方面是兴趣.一方面是跨了学科听课,内容引人入胜,主要还是我懂得太少了,哈!我记得当时讲座的主题是有关孔子与齐鲁大地的关系,也正是那场讲座让我下决心跨学院选修了<中国古代思想文化史研究>,才让我对于诸子百家思想有了更深的认识,教授们轮番上阵,让我们学习到我们中华民族先贤智慧.也认识了历史学和中国哲学专业的同学,其中还