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 基础教程之Map使用方法
Jan 17 Python
Python新手们容易犯的几个错误总结
Apr 01 Python
详解 Python 读写XML文件的实例
Aug 02 Python
Python生成器定义与简单用法实例分析
Apr 30 Python
NLTK 3.2.4 环境搭建教程
Sep 19 Python
pandas-resample按时间聚合实例
Dec 27 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
Feb 28 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
python实现UDP协议下的文件传输
Mar 20 Python
python闭包与引用以及需要注意的陷阱
Sep 18 Python
如何基于python实现年会抽奖工具
Oct 20 Python
Python用tkinter实现自定义记事本的方法详解
Mar 31 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 park、unpark、ord 函数使用方法(二进制流接口应用实例)
2010/10/19 PHP
php连接数据库代码应用分析
2011/05/29 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
jquery对单选框,多选框,文本框等常见操作小结
2014/01/08 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
详解Vue.js入门环境搭建
2017/03/17 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
2017/10/31 Javascript
js 两数组去除重复数值的实例
2017/12/06 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
jQuery+ajax实现文件上传功能
2020/12/22 jQuery
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
python编码最佳实践之总结
2016/02/14 Python
PyCharm在win10的64位系统安装实例
2017/11/26 Python
Python实现学校管理系统
2018/01/11 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
python collections模块的使用
2020/10/16 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
2020/12/14 Python
python中time包实例详解
2021/02/02 Python
Html5元素及基本语法详解
2016/08/02 HTML / CSS
写出二分查找算法的两种实现
2013/05/13 面试题
个人简历自我评价
2014/02/02 职场文书
合作合同协议书范本
2015/01/27 职场文书
施工安全员岗位职责
2015/04/11 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书
MySQL系列之四 SQL语法
2021/07/02 MySQL