Python学习笔记(十二):

  1. 计算器

  • 利用Python的正则表达式写的简易计算器
  1. # author : Ryoma
  2. # time : 17:39
  3. import re
  4. def add(string):
  5. equ = string
  6. flag = True
  7. while flag:
  8. is_right = re.search('[\-]?\d+\.?\d*\+[\-]?\d+\.?\d*', equ)
  9. if is_right:
  10. old = is_right.group()
  11. # 计算加法
  12. nums = old.split('+')
  13. sum = float(nums[0]) + float(nums[1])
  14. new = str(sum)
  15. equ = equ.replace(old,new)
  16. else:
  17. flag = False
  18. return equ
  19. def reduce(string):
  20. equ = string
  21. flag = True
  22. while flag:
  23. is_right = re.search('[\-]?\d+\.?\d*-[\-]?\d+\.?\d*', equ)
  24. if is_right:
  25. old = is_right.group()
  26. # 计算减法
  27. count = len(re.findall('-',old))
  28. if count==1:
  29. nums = old.split('-')
  30. sum = float(nums[0]) - float(nums[1])
  31. new = str(sum)
  32. equ = equ.replace(old, new)
  33. elif count==2:
  34. nums = old.split('-')
  35. sum = - float(nums[1]) - float(nums[2])
  36. new = str(sum)
  37. equ = equ.replace(old, new)
  38. else:
  39. flag = False
  40. return equ
  41. def ride(string):
  42. equ = string
  43. flag = True
  44. while flag:
  45. is_right = re.search('[\-]?\d+\.?\d*\*[\-]?\d+\.?\d*', equ)
  46. if is_right:
  47. old = is_right.group()
  48. # 计算乘法
  49. nums = old.split('*')
  50. sum = float(nums[0]) * float(nums[1])
  51. new = str(sum)
  52. equ = equ.replace(old,new)
  53. else:
  54. flag = False
  55. return equ
  56. def divide(string):
  57. equ = string
  58. flag = True
  59. while flag:
  60. is_right = re.search('[\-]?\d+\.?\d*/[\-]?\d+\.?\d*', equ)
  61. if is_right:
  62. old = is_right.group()
  63. # 计算除法
  64. nums = old.split('/')
  65. if nums[1] == '0':
  66. exit('0不能做被除数!')
  67. sum = float(nums[0]) / float(nums[1])
  68. new = str(sum)
  69. equ = equ.replace(old,new)
  70. else:
  71. flag = False
  72. return equ
  73. # 判断优先级 按照优先级进行计算:括号>乘除法>加减法
  74. def pri(equ):
  75. flag = True
  76. while flag:
  77. # 查找最里层括号
  78. ret = re.search('\([^()]+\)', equ)
  79. if ret:
  80. # 记录查找的式子
  81. old = ret.group()
  82. # 去除括号
  83. new = old.replace('(', '')
  84. new = new.replace(')', '')
  85. # 计算-先乘除后加减
  86. new = ride(new)
  87. new = divide(new)
  88. new = add(new)
  89. new = reduce(new)
  90. # 替换方程式
  91. equ = equ.replace(old, new)
  92. else:
  93. flag = False
  94. else:
  95. equ = ride(equ)
  96. equ = divide(equ)
  97. equ = add(equ)
  98. equ = reduce(equ)
  99. return equ
  100. # 格式处理
  101. def check(equ):
  102. equ = equ.replace(' ','')
  103. if len(re.findall('[^0-9\-+/*\(\).]', equ)):
  104. print("请输入正确的表达式!")
  105. elif not equ.count('(') == equ.count(')'):
  106. print("存在未闭合的括号!")
  107. else:
  108. equ = pri(equ)
  109. return equ
  110. if __name__ == '__main__':
  111. print("欢迎使用计算器".center(50,'-'))
  112. while 1:
  113. equ = input("输入你要计算的式子:")
  114. equ = check(equ)
  115. 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. Java多线程之Executor、ExecutorService、Executors、Callable、Future与FutureTask

    1. 引子 初学Java多线程,常使用Thread与Runnable创建.启动线程.如下例: Thread t1 = new Thread(new Runnable() { @Override pub ...

  2. 第1周-java作业总结与建议

    1. 本周作业简评与建议 存在的问题: 这周的作业普遍存在一个格式混乱的问题.请认真学习Markdown,我们后面的作业都要使用Markdown.Markdown学习请参考http://group.c ...

  3. 如何让eclipse在程序修改后,点击运行可以自动保存。

    preferences>run/debug>launching里面save required dirty editors before launching选always就自动保存咯选pro ...

  4. 201521123087 《Java程序设计》第3周学习总结

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

  5. 201521123044 《Java程序设计》第01周学习总结

    1.本章学习总结 你对于本章知识的学习总结 1.了解了Java的发展史. 2.学习了什么是JVM,区分JRE与JDK,下载JDK. 3.从C语言的.c 到C++的 .cpp再到Java的.java,每 ...

  6. 《JAVA程序设计》第9周学习总结

    1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现 ...

  7. 201521123001《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...

  8. SpringMVC第七篇【RESTful支持、拦截器】

    RESTful支持 我们在学习webservice的时候可能就听过RESTful这么一个名词,当时候与SOAP进行对比的-那么RESTful究竟是什么东东呢??? RESTful(Representa ...

  9. 基于FPGA的腐蚀膨胀算法实现

    本篇文章我要写的是基于的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,,腐蚀在二值图像的基础上做"收缩"或"细化"操作,膨胀在二值图像的基础上做" ...

  10. PHP中isset和empty的区别(最后总结)

    PHP的isset()函数 一般用来检测变量是否设置 格式:bool isset ( mixed var [, mixed var [, ...]] ) 功能:检测变量是否设置 返回值: 若变量不存在 ...