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. 201521123055 《Java程序设计》第3周学习总结

    1. 本章学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...

  2. 201521123018 《Java程序设计》第12周学习总结

    1. 本章学习总结 你对于本章知识的学习总结 2. 书面作业 将Student对象(属性:int id, String name,int age,double grade)写入文件student.da ...

  3. 使用C#编写SqlHelper类

    无聊的周末,学习.编码无力.想找点事干但又不知道干点什么,猛然发现自己学过的SqlHelper快忘记了.于是乎虎躯一震心想怎能如此堕落下去,立马打开电脑,双手摸上键盘.写下此文作为学习过程中的复习,并 ...

  4. Map.containsKey方法——判断Map集合对象中是否包含指定的键名

    该方法判断Map集合对象中是否包含指定的键名.如果Map集合中包含指定的键名,则返回true,否则返回false. public static void main(String[] args) { M ...

  5. 04面向对象编程-01-创建对象 和 原型理解(prototype、__proto__)

    1.JS中对象的"不同":原型概念 从Java中我们可以很好地去理解 "类" 和 "实例" 两个概念,可是在JavaScript中,这个概念 ...

  6. Apache Spark 2.2.0 中文文档 - 概述 | ApacheCN

    Spark 概述 Apache Spark 是一个快速的, 多用途的集群计算系统. 它提供了 Java, Scala, Python 和 R 的高级 API,以及一个支持通用的执行图计算的优化过的引擎 ...

  7. 【译】The Accidental DBA:SQL Server Backup

    最近重新翻看The Accidental DBA,将SQL Server Backup部分稍作整理,方便以后查阅.此篇是Part 1Part 2:The Accidental DBA:Troubles ...

  8. ”TCP连接“究竟是什么意思?

    我们经常听到"建立TCP连接","服务器的连接数量有限"等,但仔细一想,连接究竟是个什么东西,是和电话一样两端连起一根线?似乎有点抽象不是么? 1. 久违的分组 ...

  9. 利用原生js制做数据管理平台,适合初学者学习

    摘要:数据管理平台在当今社会中运用十分广泛,我们在应用过程中,要对数据进行存储,管理,以及删除查询等操作,而我们在实际设计的时候,大牛们大多用到的是JQuery,而小白对jq理解也较困难,为了让大家回 ...

  10. PyTorch教程之Autograd

    在PyTorch中,autograd是所有神经网络的核心内容,为Tensor所有操作提供自动求导方法. 它是一个按运行方式定义的框架,这意味着backprop是由代码的运行方式定义的. 一.Varia ...