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函数帮助查询小工具
Mar 13 Python
Python subprocess模块学习总结
Mar 13 Python
Python  pip安装lxml出错的问题解决办法
Feb 10 Python
浅谈python 里面的单下划线与双下划线的区别
Dec 01 Python
Python操作mysql数据库实现增删查改功能的方法
Jan 15 Python
Python实现七彩蟒蛇绘制实例代码
Jan 16 Python
Python自定义线程类简单示例
Mar 23 Python
浅谈python脚本设置运行参数的方法
Dec 03 Python
Python批量生成特定尺寸图片及图画任意文字的实例
Jan 30 Python
Django配置文件代码说明
Dec 04 Python
python如何使用腾讯云发送短信
Sep 17 Python
python 星号(*)的多种用途
Sep 21 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读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
Stop SQL Server
2007/06/21 Javascript
nodejs批量修改文件编码格式
2015/01/22 NodeJs
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
探究Vue.js 2.0新增的虚拟DOM
2016/10/20 Javascript
Bootstrap源码解读网格系统(3)
2016/12/22 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
使用angular-cli webpack创建多个包的方法
2018/10/16 Javascript
原生JS实现列表内容自动向上滚动效果
2019/05/22 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
详解Python中的元组与逻辑运算符
2015/10/13 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
PyCharm设置每行最大长度限制的方法
2019/01/16 Python
python带参数打包exe及调用方式
2019/12/21 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
python上selenium的弹框操作实现
2020/07/13 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
python 实现学生信息管理系统的示例
2020/11/28 Python
用Python 执行cmd命令
2020/12/18 Python
python 递归相关知识总结
2021/03/03 Python
CAT鞋加拿大官网:CAT Footwear加拿大
2020/08/05 全球购物
2014年置业顾问工作总结
2014/11/17 职场文书
穷人该怎么创业?谨记以下几点
2019/07/11 职场文书
Python常遇到的错误和异常
2021/11/02 Python
Python读写yaml文件
2022/03/20 Python