python123外汇兑换计算器_Python 3.x--使用re模块,实现计算器运算实例

1 importre2

3 #乘除运算处理,可以处理不含括号的加减和乘除函数(只处理乘除)

4 defmulti_and_divi(arg):5 #传入参数为列表,如:['3*2-1*9/3',0]

6 val =arg[0]7 #对字符串进行乘除匹配:如3*2-1*9/3,就匹配:3*2

8 mch = re.search('\d+\.?\d*[\*\/]+[\+\-]?\d+\.?\d*', val)9 if not mch: #mch为空,没有匹配

10 return

11 #将匹配到的内容保存在content中

12 content = re.search('\d+\.?\d*[\*\/]+[\+\-]?\d+\.?\d*',val).group()13 #print('>>>>>>>>',content)

14 #对匹配到的内容进行*、/判断,然后进行相应的计算,如2*3,先分割后计算

15 if len(content.split('*')) > 1:16 n1,n2 = content.split('*')17 value = float(n1)*float(n2)18 elif len(content.split('/')) > 1:19 n1,n2 = content.split('/')20 value = round(float(n1)/float(n2),8)21 #取出匹配内容两头的内容:before,after

22 before,after = re.split('\d+\.?\d*[\*\/]+[\+\-]?\d+\.?\d*',val,1)23 #拼接成新的字符串

24 new_str = "%s%s%s" %(before, value, after)25 #把new_str赋值到arg[0]中

26 arg[0] =new_str27 #print(arg)

28 #再递归进行乘除计算

29 multi_and_divi(arg)30

31 #multi_and_divi(['-40/-5-4*+2+2*-3+3*+3',0])

32 #处理后的结果:['--8.0-8.0+-6.0+9.0', 0]

33

34 #加减运算处理

35 defadd_and_substr(arg):36 #arg = ['--8.0-8.0+-6.0+9.0', 0]

37 #对传进来的arg[0]表达式进行第1次处理,将表达式中的++\--变成+,+-、-+变成-,处理完成以后就直接break

38 whileTrue:39 if arg[0].__contains__('++') or arg[0].__contains__('--') or arg[0].__contains__('-+') or arg[0].__contains__('+-'):40 arg[0] = arg[0].replace('++','+')41 arg[0] = arg[0].replace('--','+')42 arg[0] = arg[0].replace('+-','-')43 arg[0] = arg[0].replace('-+','-')44 else:45 break

46

47 #对传进来的arg[0]表达式进行第2次处理,提取首位为“-”,并将提取的次数保存在arg[1]中

48 #并且每提取1次:将表达式中的"+"替换成"-"."-"替换成"+",然后取arg[0]表达式字符串中第1到最后1位即可赋给arg[0]

49 #如:-8-10+19-4 = -(8+10-19+4)

50 if arg[0].startswith('-'):51 arg[1] += 1

52 arg[0] = arg[0].replace('-', '&') #&8.0&10.0&6.0+9.0

53 arg[0] = arg[0].replace('+', '-') #&8.0&10.0&6.0-9.0

54 arg[0] = arg[0].replace('&', '+') #+8.0+10.0+6.0-9.0

55 arg[0] = arg[0][1:]56 value =arg[0]57

58 #对字符串value进行匹配,匹配加或减两边的内容,如1+2-3,就匹配1+2

59 mch = re.search('\d+\.?\d*[\+\-]+\d+\.?\d*',value)60 if notmch:61 return

62 content = re.search('\d+\.?\d*[\+\-]+\d+\.?\d*',value).group()63 if len(content.split('+')) > 1:64 n1,n2 = content.split('+')65 get_value = float(n1)+float(n2)66 else:67 n1,n2 = content.split('-')68 get_value = float(n1)-float(n2)69 #取出匹配内容两头的内容:before,after

70 before, after = re.split('\d+\.?\d*[\+\-]+\d+\.?\d*', arg[0], 1)71 #拼接成新的字符串

72 new_str = "%s%s%s" %(before, get_value, after)73 #把new_str赋值到arg[0]中

74 arg[0] =new_str75 #print(arg)

76 add_and_substr(arg)77

78 #add_and_substr(['-8.0-10.0+-6.0+9.0', 0])

79

80 #计算函数

81 defcompute(sr):82 #传入需要计算的函数,如:'(-40/5-4*2+2*-3+3*3)'

83 #去掉括号,组成列表

84 list_str = [sr.strip('()'), 0]85 multi_and_divi(list_str)86 add_and_substr(list_str)87

88 #判断new_str[1]是奇数还是偶数,若是奇数,表明结果为负数,否则为正数

89 #注:计算加减和乘除的函数没有返回值,可以取出list_str结果,原因解释见最后实例

90 count = divmod(list_str[1], 2)91 result =list_str[0]92 if count[1] == 1:93 result = float(result) * (-1)94 returnresult95

96 #print(compute('-40/5-4*2+2*-3+3*3'))

97

98 #remv_brackets:去括号,只保留最内层函数

99 defremv_brackets(sr):100 flag =True101 whileflag:102 #匹配最里层“()”及函数,如:1+2*(3/(3-2)*2),这里匹配的是(3-2)

103 i = re.search('\([^()]+\)',sr)104 ifi:105 sub_str =i.group()106 #调用计算函数,返回值赋值给sub_res

107 sub_res =compute(sub_str)108 #将i截取的第一个括号内容替换为转化为str类型的sub_res

109 sr =sr.replace(sub_str,str(sub_res))110 else:111 #如果没有括号了,打印计算函数返回的结果

112 print('结果是:',compute(sr))113 flag =False114

115 if __name__ == '__main__':116 print('-------------欢迎使用--------------')117 flag =True118 whileflag:119 sr = input('请输入计算函数(q退出):')120 sr = re.sub('\s*','',sr)121 symbol = re.search('[0-9q\+\-\/\*]',sr)122 #print(symbol)

123 if not symbol: #判断symbol为空

124 print('输入有误')125 sr = input('请重新输入要计算的函数(q:退出):')126 sr = re.sub('\s*', '', sr)127 if sr == 'q':128 exit('感谢使用,再见')129 else:130 remv_brackets(sr)131 else:132 if sr == 'q':133 exit('感谢使用,再见')134 else:135 remv_brackets(sr)136

137 #1-2*((60-30+(-40/5)*(9-2*5/3+ 7/3*99/4*2998+10*568/14)) - (-4*3)/(16-3*2) )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python修改文件名字数字_python实现多进程按序号批量修改文件名的方法示例

本文实例讲述了python实现多进程按序号批量修改文件名的方法。分享给大家供大家参考,具体如下:说明文件名命名方式如图,是数字序号开头,但是中间有些文件删掉了,序号不连续,这里将序号连续起来,…

遗传算法求函数最大值实验_小知识:什么是遗传算法

1 什么是遗传算法遗传算法(GeneticAlgorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。其主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定;…

$dbms=mysql_Oracle dbms

Oracle dbms_random包的用法 Oracle dbms_random包的用法 1.dbms_random.value方法 dbms_random是一个可以生成随机数或者字符串的程序包。这个包有initialize()、seed()、terminate()、value()、normal()、random()、string()等几个函数,但value()是最常用Oracle d…

js定位div坐标存入mysql_JavaScript与Div 对层定位和移动获得坐标

1:移动图层 获得点的x轴y轴坐标,从而进行绝对定位(注意:竖拉框会影响 x 轴 y 轴坐标值)var x,y,z,downfalse,objfunction init(){objevent.srcElement //事件触发对象obj.setCapture() //设置属于当前对象的鼠标捕捉zobj.style.zIndex …

mysql 不指定 长度吗_mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11代表11个字节吗?...

原先对mysql不太理解,但也没有报错。但理解的不够深入。这次补上。原来以为int(11)是指11个字节,int(10)就是10个字节。我错了。http://zhidao.baidu.com/link?urlpuYWaGBQNKNHgffO5kdvXshF3KmX8OuB4Mor3HXapbNHa8m1CdlF8PJTqVuKa1eKcEd6Bv2NKUr3I-KJr5…

python绘制折线图显示数据_漂亮图表也可用python信手拈来!一文教你学会用Python绘制堆积折线图...

今天,和大家聊聊关于Python绘图相关的东东哦,还是和大家继续深耕Python经典的matplotlib库哦!好啦,咱们就开始吧!首先,咱们聊聊如何在Python中去绘制经典的堆积折线图到这可能有些朋友可能会问了&#xff1…

linux下使用odbc连接mysql_Linux环境下通过ODBC访问MSSql Server

为了解决Linux系统连接MSSql Server的问题,微软为Linux系统提供了连接MSSql Server的ODBC官方驱动。通过官方驱动,Linux程序可以方便地对MSSql Server进行访问。官网提供了三个版本的驱动,分别用于以下发行版的Linux系统:64bit Re…

python画图代码对比_Python实现代码差异对比分析

在写代码过程,有时需要对比查看两个代码文件的不同,肉眼查看费事费力,很难进行对比找出不同。例如,程序运行报错时,会对比自己先前写的代码或者参考别人代码,有哪些地方不对,此时便可以通过该程…

insert into user mysql root_跳过授权表登录后使用insert into创建root权限用户

起因:刚刚搭建好的mysql数据库,做基础优化时,不小心把所有用户都删除了,并且退出了。没办法,只好跳过授权表登录,新建root用户。过程如下:一、停掉mysql,跳过授权登录[rootexplnk-za…

matplotlib 设置标注方向_Python 使用matplotlib画图添加标注、及移动坐标轴位置

import matplotlib.pyplot as pltimport matplotlibimport numpy as np#解决中文乱码问题,引入windows字体库myfont matplotlib.font_manager.FontProperties(fnamerC:/Windows/Fonts/msyh.ttf)x np.linspace(-3,3,50)y 2*x 1plt.plot(x,y)plt.figure(1,figsize…

flyway配置mysql_Flyway快速上手教程

一、Flyway是什么官网解释地非常全面,可先大致阅读一下。简单地说,flyway是一个能对数据库变更做版本控制的工具。二、为什么要用Flyway在多人开发的项目中,我们都习惯了使用SVN或者Git来对代码做版本控制,主要的目的就是为了解决…

mysql主从 单点_MySQL主从复制虽好,能完美解决数据库单点问题吗?

一、单个数据库 服务器 的缺点数据库服务器存在单点问题;数据库服务器资源无法满足增长的读写请求;高峰时数据库连接数经常超过上限。二、如何解决单点问题增加额外的数据库服务器,组建数据库集群;同一集群中的数据库服务器需要具…

java包含关系图_Java——Spring框架完整依赖关系图!再复习了解加工一下吧?

因为spring-core依赖了commons-logging,而其他模块都依赖了spring-core,所以整个spring框架都依赖了commons-logging,如果有自己的日志实现如log4j,可以排除对commons-logging的依赖,没有日志实现而排除了commons-logg…

java ora 28040_Oracle 11g与112c中ORA-28040 错误解决

今天遇到一个连接192.168.56.102这个库报错Java.sql.SQLException: ORA-28040: No matching authentication protocolOracle 12C下查询此报错oralce:/oracle/db/app/12.1.0/db/network/admin> oerr ora 2804028040, 0000, "No matching authentication protocol"/…

java中有序数组比无序数值好_java面向对象的有序数组和无序数组的比较

packageaa;classArray{//定义一个有序数组private long[] a;//定义数组长度private intnElems;//构造函数初始化public Array(intmax){a new long[max];nElems 0;}//size函数public intsize(){returnnElems;}//定义添加函数public void insert(longvalue){//将value赋值给数组成…

java成员的访问权限_Java成员的访问权限

类中某成员(方法或属性,method or field)的访问权限:1、package(或称为friendly,但不用写出,friendly也不是关键字)权限,在同一包中的类和继承该类的子类可以访问;2、public权限,任何类都可以访问;3、priva…

java jvm 加载类的顺序_java JVM-类加载静态初始化块调用顺序

测试类加载的全过程public class Have {static {System.out.println("加载Have");//先加载Have再调用main方法}public static void main(String[] args) throws Exception {System.out.println("main方法"); //先调main方法A anew A(); //先初始化父类&…

lua jit java jit_Lua JIT 2.0 发布了,一百五十倍的性能提升!

jzhang2014-4-7 15:44:00阅读(2432)评论(2)先把官方主页摆出来:外链网址已屏蔽luajit.org/luajit.htmlLua JIT 1.0早就有了,但是性能一般,这次的2.0是重新编写的,优化效果有了质的飞跃。下面这个表是作者的测试结果,其…

java实验_Java实验报告(实验一)

课程:Java程序设计 班级: 1351姓名:王玮怡 学号:20135116成绩: 指导教师:娄嘉鹏 实验日期:2015.04.15实验密级: 预习程度&#…

java web 文件上传工具类_JavaWeb中实现文件上传的方式有哪些?

上回我们说了下文件下载的方式有哪些,这次我们从不同的环境下简单来说说文件上传的方式有哪些。文件上传的方式Servlet2.5 方式Servlet3.0 方式SpringMVC 方式案例实操Servlet2.5 方式文件上传涉及到前台页面的编写和后台服务器端代码的编写,前台发送文件…