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中使用Beautiful Soup库的超详细教程
Apr 30 Python
Python中List.count()方法的使用教程
May 20 Python
Python实时获取cmd的输出
Dec 13 Python
python中requests和https使用简单示例
Jan 18 Python
python3.4.3下逐行读入txt文本并去重的方法
Apr 29 Python
解决python爬虫中有中文的url问题
May 11 Python
python 实现查找文件并输出满足某一条件的数据项方法
Jun 12 Python
Python数据正态性检验实现过程
Apr 18 Python
Python无损压缩图片的示例代码
Aug 06 Python
python3实现简单飞机大战
Nov 29 Python
教你使用Python pypinyin库实现汉字转拼音
May 27 Python
详解Python中的for循环
Apr 30 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 curl 伪造IP来源的实例代码
2012/11/01 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
提取字符串中年月日的函数代码
2013/11/05 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
2016/11/16 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
2016/11/24 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
JavaScript观察者模式原理与用法实例详解
2020/03/10 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
[02:56]DOTA2矮人直升机 英雄基础教程
2013/11/26 DOTA
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
详解python3中socket套接字的编码问题解决
2017/07/01 Python
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
python实现简单flappy bird
2018/12/24 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
前端使用canvas生成盲水印的加密解密的实现
2020/12/16 HTML / CSS
中专毕业生自荐信范文
2013/11/28 职场文书
摄影专业毕业生求职信
2014/03/13 职场文书
亮剑精神演讲稿
2014/05/23 职场文书
咖啡店创业计划书
2014/08/15 职场文书
婚礼新人答谢词
2015/01/04 职场文书
水知道答案观后感
2015/06/08 职场文书
浅谈vue2的$refs在vue3组合式API中的替代方法
2021/04/18 Vue.js
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP
python批量创建变量并赋值操作
2021/06/03 Python