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中使用urllib2防止302跳转的代码例子
Jul 07 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
May 19 Python
python在文本开头插入一行的实例
May 02 Python
使用PyQt4 设置TextEdit背景的方法
Jun 14 Python
提升Python效率之使用循环机制代替递归函数
Jul 23 Python
Django rest framework jwt的使用方法详解
Aug 08 Python
详解用python计算阶乘的几种方法
Aug 14 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
Sep 16 Python
Django ORM filter() 的运用详解
May 14 Python
如何导出python安装的所有模块名称和版本号到文件中
Jun 05 Python
Python如何向SQLServer存储二进制图片
Jun 08 Python
基于python定位棋子位置及识别棋子颜色
Jul 26 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
用PHP编写PDF文档生成器
2006/10/09 PHP
杏林同学录(六)
2006/10/09 PHP
PHP XML操作的各种方法解析(比较详细)
2010/06/17 PHP
php实现水仙花数的4个示例分享
2014/04/08 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
2014/11/04 PHP
php上传文件问题汇总
2015/01/30 PHP
百度地图API使用方法详解
2015/08/25 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
YII框架批量插入数据的方法
2017/03/18 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
仅IE不支持setTimeout/setInterval函数的第三个以上参数
2011/05/25 Javascript
JavaScript中常用的运算符小结
2012/01/18 Javascript
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
JavaScript关于提高网站性能的几点建议(一)
2016/07/24 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
vue.js使用3DES加密的方法示例
2018/05/18 Javascript
Vue组件模板的几种书写形式(3种)
2020/02/19 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
[04:00]DOTA2解说界神雕侠侣 CJ第四天谷子现场过生日
2013/07/30 DOTA
python装饰器使用方法实例
2013/11/21 Python
python实现各进制转换的总结大全
2017/06/18 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
管理学专业个人求职信范文
2013/09/21 职场文书
自主招生自荐信指南
2014/02/04 职场文书
论文指导教师评语
2014/04/28 职场文书
详解Python生成器和基于生成器的协程
2021/06/03 Python
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript
利用python做数据拟合详情
2021/11/17 Python
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers