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中的多线程实例教程
Aug 27 Python
python链接oracle数据库以及数据库的增删改查实例
Jan 30 Python
numpy.delete删除一列或多列的方法
Apr 03 Python
Django如何配置mysql数据库
May 04 Python
在交互式环境中执行Python程序过程详解
Jul 12 Python
Python实现某论坛自动签到功能
Aug 20 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 Python
Python3操作YAML文件格式方法解析
Apr 10 Python
python调用API接口实现登陆短信验证
May 10 Python
Django model class Meta原理解析
Nov 14 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
Nov 15 Python
Python之matplotlib绘制折线图
Apr 13 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
给多个地址发邮件的类
2006/10/09 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
php检查是否是ajax请求的方法
2015/04/16 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
php批量删除操作(数据访问)
2017/05/23 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
php实例化一个类的具体方法
2019/09/19 PHP
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
使用npm发布Node.JS程序包教程
2015/03/02 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
jquery滚动条插件(可以自定义)
2016/12/11 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
Angular2中select用法之设置默认值与事件详解
2017/05/07 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
[15:23]教你分分钟做大人:虚空假面
2014/10/30 DOTA
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
Python中有几个关键字
2020/06/04 Python
python实现网页录音效果
2020/10/26 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
2020/11/17 Python
python中的列表和元组区别分析
2020/12/30 Python
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
公司会计岗位职责
2014/02/13 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA
设置IIS Express并发数
2022/07/07 Servers