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中最常用的操作列表的几种方法归纳
Apr 24 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
Oct 18 Python
Python3.6正式版新特性预览
Dec 15 Python
Python错误: SyntaxError: Non-ASCII character解决办法
Jun 08 Python
Python抓取框架Scrapy爬虫入门:页面提取
Dec 01 Python
详解django的serializer序列化model几种方法
Oct 16 Python
python利用pandas将excel文件转换为txt文件的方法
Oct 23 Python
Python正则表达式匹配日期与时间的方法
Jul 07 Python
简单了解Django ContentType内置组件
Jul 23 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
Feb 25 Python
Python select及selectors模块概念用法详解
Jun 22 Python
python基于socket模拟实现ssh远程执行命令
Dec 05 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 显示客户端IP与服务器IP的代码
2010/10/12 PHP
php单例模式示例分享
2015/02/12 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
轻松实现php文件上传功能
2017/02/17 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
浅谈Javascript面向对象编程
2011/11/15 Javascript
jQuery提交表单ajax查询实例代码
2012/10/07 Javascript
JQuery 使用attr方法实现下拉列表选中
2014/10/13 Javascript
Javscript调用iframe框架页面中函数的方法
2014/11/01 Javascript
js判断当前页面在移动设备还是在PC端中打开
2016/01/06 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
Python给图像添加噪声具体操作
2019/03/03 Python
python批量修改ssh密码的实现
2019/08/08 Python
python中class的定义及使用教程
2019/09/18 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
Django model class Meta原理解析
2020/11/14 Python
Python对excel的基本操作方法
2021/02/18 Python
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
柏林通行证:Berlin Pass
2018/04/11 全球购物
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
教师对学生的寄语
2014/04/03 职场文书
法院先进个人事迹材料
2014/05/04 职场文书
努力学习演讲稿
2014/05/10 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
预备党员群众意见
2015/06/01 职场文书
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL