Python正则表达式实现简易计算器功能示例


Posted in Python onMay 07, 2019

本文实例讲述了Python正则表达式实现简易计算器功能。分享给大家供大家参考,具体如下:

需求:使用正则表达式完成一个简易计算器。

功能:能够计算简单的表达式。

如:1*2*((1+2)/(2+3)+1)*5.1-3+2**2

import re
class SimpleCalc(object):
  # 表达式检测
  def check(self,exp):
    # 合法字符检测
    res = re.findall(r"[^\d\+\-\*/\(\)\.]", exp)
    print(res)
    if res:
      print("表达式不正确!!!")
      print("输入了非法字符:", res)
      return False
    # 括号检测
    res = re.findall(r"(?:[\d\)]\()|(?:\([\*/\)])|(?:[\-\+\*/]\))",exp)
    if res :
      print("表达式不正确!!!")
      print("括号使用有误:", res)
      return False
    res = re.findall(r"\(|\)", exp)
    if res.count('(') != res.count(')'):
      print("表达式不正确!!!")
      print("括号不匹配:", res)
      return False
    # 运算符检测
    res = re.findall(r"[\-\+/]{2,}|\*{3,}", exp)
    if res:
      print("表达式不正确!!!")
      print("运算符有误:", res)
      return False
    # 小数点位置检测
    res = re.findall(r"(^(?<=[0-9])?\.\d+)|(\.\d*?\.)|\.(\D|$)", exp)
    if res:
      print("表达式不正确!!!")
      print("小数点位置有误:", res)
      return False
    return True
def main():
  simpleCalc = SimpleCalc()
  while True:
    exp = input("请输入一个正确的表达式(退出请输入t):\n")
    if exp == 't':
      break
    if simpleCalc.check(exp):
      print('=',eval(exp))
    else:
      continue
if __name__ == '__main__':
  main()

输出:

请输入一个正确的表达式(退出请输入t):
1*2*((1+2)/(2+3)+1)*5.1-3+2**2
[]
= 17.32
请输入一个正确的表达式(退出请输入t):
12+a
['a']
表达式不正确!!!
输入了非法字符: ['a']
请输入一个正确的表达式(退出请输入t):

Python 相关文章推荐
python实现自动重启本程序的方法
Jul 09 Python
Python实现动态加载模块、类、函数的方法分析
Jul 18 Python
使用Pyinstaller的最新踩坑实战记录
Nov 08 Python
详解Python nose单元测试框架的安装与使用
Dec 20 Python
详解python实现线程安全的单例模式
Mar 05 Python
Django+Ajax+jQuery实现网页动态更新的实例
May 28 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
Dec 24 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
Jan 29 Python
python代理工具mitmproxy使用指南
Jul 04 Python
pycharm显示远程图片的实现
Nov 04 Python
python爬虫模拟浏览器的两种方法实例分析
Dec 09 Python
Python3爬虫中Splash的知识总结
Jul 10 Python
深入浅析Python 中 is 语法带来的误解
May 07 #Python
利用python如何在前程无忧高效投递简历
May 07 #Python
Python可迭代对象操作示例
May 07 #Python
python实现支付宝转账接口
May 07 #Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
May 07 #Python
python验证身份证信息实例代码
May 06 #Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
May 06 #Python
You might like
第十二节--类的自动加载
2006/11/16 PHP
openflashchart 2.0 简单案例php版
2012/05/21 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
2013/02/28 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
PHP中使用匿名函数操作数据库的例子
2014/11/17 PHP
php检查页面是否被百度收录
2015/10/28 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
php无限级评论嵌套实现代码
2018/04/18 PHP
javascript不同页面传值的改进版
2008/09/30 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
javascript关于继承解析
2016/05/10 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
2017/10/19 jQuery
vue 表单之通过v-model绑定单选按钮radio
2019/05/13 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
Vue 的双向绑定原理与用法揭秘
2020/05/06 Javascript
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
梳理一下vue中的生命周期
2020/12/30 Vue.js
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
对python GUI实现完美进度条的示例详解
2018/12/13 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
html5 利用canvas手写签名并保存的实现方法
2018/07/12 HTML / CSS
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
linux系统都有哪些运行级别
2016/03/26 面试题
大学生毕业求职的自我评价
2013/09/29 职场文书
司法建议书范文
2014/05/13 职场文书
总结高并发下Nginx性能如何优化
2021/11/01 Servers
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android
bose降噪耳机音能消除人声吗
2022/04/19 数码科技