Python学习笔记(十二):

  1. 计算器

  • 利用Python的正则表达式写的简易计算器
# author : Ryoma
# time : 17:39 import re def add(string):
equ = string
flag = True
while flag:
is_right = re.search('[\-]?\d+\.?\d*\+[\-]?\d+\.?\d*', equ)
if is_right:
old = is_right.group()
# 计算加法
nums = old.split('+')
sum = float(nums[0]) + float(nums[1])
new = str(sum)
equ = equ.replace(old,new)
else:
flag = False
return equ def reduce(string):
equ = string
flag = True
while flag:
is_right = re.search('[\-]?\d+\.?\d*-[\-]?\d+\.?\d*', equ)
if is_right:
old = is_right.group()
# 计算减法
count = len(re.findall('-',old))
if count==1:
nums = old.split('-')
sum = float(nums[0]) - float(nums[1])
new = str(sum)
equ = equ.replace(old, new)
elif count==2:
nums = old.split('-')
sum = - float(nums[1]) - float(nums[2])
new = str(sum)
equ = equ.replace(old, new)
else:
flag = False
return equ def ride(string):
equ = string
flag = True
while flag:
is_right = re.search('[\-]?\d+\.?\d*\*[\-]?\d+\.?\d*', equ)
if is_right:
old = is_right.group()
# 计算乘法
nums = old.split('*')
sum = float(nums[0]) * float(nums[1])
new = str(sum)
equ = equ.replace(old,new)
else:
flag = False
return equ def divide(string):
equ = string
flag = True
while flag:
is_right = re.search('[\-]?\d+\.?\d*/[\-]?\d+\.?\d*', equ)
if is_right:
old = is_right.group()
# 计算除法
nums = old.split('/')
if nums[1] == '0':
exit('0不能做被除数!')
sum = float(nums[0]) / float(nums[1])
new = str(sum)
equ = equ.replace(old,new)
else:
flag = False
return equ # 判断优先级 按照优先级进行计算:括号>乘除法>加减法
def pri(equ):
flag = True
while flag:
# 查找最里层括号
ret = re.search('\([^()]+\)', equ)
if ret:
# 记录查找的式子
old = ret.group()
# 去除括号
new = old.replace('(', '')
new = new.replace(')', '')
# 计算-先乘除后加减
new = ride(new)
new = divide(new)
new = add(new)
new = reduce(new)
# 替换方程式
equ = equ.replace(old, new)
else:
flag = False
else:
equ = ride(equ)
equ = divide(equ)
equ = add(equ)
equ = reduce(equ) return equ # 格式处理
def check(equ):
equ = equ.replace(' ','')
if len(re.findall('[^0-9\-+/*\(\).]', equ)):
print("请输入正确的表达式!")
elif not equ.count('(') == equ.count(')'):
print("存在未闭合的括号!")
else:
equ = pri(equ)
return equ if __name__ == '__main__':
print("欢迎使用计算器".center(50,'-'))
while 1:
equ = input("输入你要计算的式子:")
equ = check(equ)
print(equ)

Python正则表达计算器的更多相关文章

  1. python 正则表达提取方法 (提取不来的信息print不出来 加个输出type 再print信息即可)

    1,正则表达提取 (findall函数提取) import re a= "<div class='content'>你大爷</div>"x=re.finda ...

  2. Python 正则表达试

    字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在.比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦, ...

  3. Python 正则实现计算器

    # !/usr/bin/env/ python3 # -*- coding: utf-8 -*- """用户输入计算表达式,显示计算结果""" ...

  4. Python 正则表达模块详解

    Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...

  5. Python正则表达

    ```# -*- coding:utf-8 -*-import re re - Support for regular expressions (RE).正则表达式是一个特殊的字符序列,它能帮助你方便 ...

  6. PYTHON 正则表达示入门

    确实是实践出真知,自己手打代码之后,以前停在理论上的东东,慢慢可以进入实战了. 比如,MATCH和SEARCH之间的区别. #encoding: UTF-8 import re pattern = r ...

  7. python正则表达提取文本好文

    摘自: http://www.cnblogs.com/rj81/p/5933838.html

  8. Python之面向对象和正则表达(代数运算和自动更正)

    面向对象 一.概念解释 面对对象编程(OOP:object oriented programming):是一种程序设计范型,同时也是一种程序开发的方法,实现OOP的程序希望能够在程序中包含各种独立而又 ...

  9. Python实例---利用正则实现计算器[FTL版]

    import re # 格式化 def format_str(str): str = str.replace('--', '+') str = str.replace('-+', '-') str = ...

随机推荐

  1. 201521123015 《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

  2. Hyperledger Fabric 1.0 从零开始(六)——创建Fabric多节点集群

    4:创建Fabric多节点集群 4.1.配置说明 首先可以根据官方Fabric自带的e2e_cli列子中的集群方案来生成我们自己的集群,与案例不同的是我们需要把容器都分配到不同的服务器上,彼此之间通过 ...

  3. Maven常见错误以及解决方案【转载】

    常见的Maven错误 当遇到401错误的时候,看看自己当前使用的Maven是集成的还是自己下载的,然后去配置setting.xml文件

  4. s:textarea 标签不能改变大小的解决方案

    在s标签写的form中,无法利用rows="50" cols="75"来改变s:textarea大小,cssClass也不管用时: 直接用普通的textarea ...

  5. 1 Spring Cloud Eureka服务治理

    注:此随笔为读书笔记.<Spring Cloud微服务实战> 什么是微服务? 微服务是将一个原本独立的系统拆分成若干个小型服务(一般按照功能模块拆分),这些小型服务都在各自独立的进程中运行 ...

  6. YYHS-NOIP2017Training0921-逆光

    题目描述 有一束光/那瞬间/是什么痛得刺眼/你的视线是谅解/为什么舍不得熄灭/我逆着光却看见/那是泪光/那力量/我不想再去抵挡/面对希望/逆着光/感觉爱存在的地方/一直就在我身旁 Descriptio ...

  7. 关于ios::sync_with_stdio(false)

    作用就是取消同步,这样的话使用cin就和使用scanf效率相似. 但是今天在做题的时候碰到一点小问题,就是在关闭同步的时候使用scanf是交了一发代码,然后RE了(经检查scanf没有写错),而把关同 ...

  8. ASP.NET Core 认证与授权[2]:Cookie认证

    由于HTTP协议是无状态的,但对于认证来说,必然要通过一种机制来保存用户状态,而最常用,也最简单的就是Cookie了,它由浏览器自动保存并在发送请求时自动附加到请求头中.尽管在现代Web应用中,Coo ...

  9. 一个基于Asp.net MVC的博客类网站开源了!

    背景说明: 大学时毕业设计作品,一直闲置在硬盘了,倒想着不如开源出来,也许会对一些人有帮助呢,而且个人觉得这个网站做得还是不错了,毕竟是花了不少心思,希望对你有所帮助. github地址:https: ...

  10. 使用SoapUI工具做get请求和post请求接口测试

    祝大家节日快乐啦. 之前写过的一篇帖子已经介绍了SoapUI工具的基本使用,所以在此不再重复讲解关于建工程.建测试套件.添加用例等操作,可查看该篇文章详解:http://www.cnblogs.com ...