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中使用MELIAE分析程序内存占用实例
Feb 18 Python
python中__call__内置函数用法实例
Jun 04 Python
Python实现求数列和的方法示例
Jan 12 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
PySide和PyQt加载ui文件的两种方法
Feb 27 Python
Django 外键的使用方法详解
Jul 19 Python
python游戏开发的五个案例分享
Mar 09 Python
python2和python3哪个使用率高
Jun 23 Python
python实现视频压缩功能
Dec 18 Python
如何通过安装HomeBrew来安装Python3
Dec 23 Python
Python使用openpyxl批量处理数据
Jun 23 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 管理系统程序中的后门
2009/08/05 PHP
php cc攻击代码与防范方法
2012/10/18 PHP
微信公众平台开发(五) 天气预报功能开发
2016/12/03 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
JavaScript判断textarea值是否为空并给出相应提示
2014/09/04 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
axios学习教程全攻略
2017/03/26 Javascript
用原生JS实现简单的多选框功能
2017/06/12 Javascript
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
2018/01/08 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
2019/01/29 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第一场 1月24日
2021/03/11 DOTA
Python的Django框架中的Context使用
2015/07/15 Python
Python三级目录展示的实现方法
2016/09/28 Python
Pycharm远程调试openstack的方法
2017/11/21 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
python实现简易数码时钟
2021/02/19 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
2019/01/30 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
python 循环数据赋值实例
2019/12/02 Python
python设置环境变量的作用整理
2020/02/17 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
集世界奢侈品和设计师品牌的意大利精品买手店:Tessabit
2019/08/17 全球购物
上海天奕面试题笔试题
2015/04/19 面试题
单位提档介绍信
2014/01/17 职场文书
吸烟检讨书2000字
2014/02/13 职场文书
公务员年终个人总结
2015/02/12 职场文书