Python基于正则表达式实现计算器功能


Posted in Python onJuly 13, 2020

计算表达式:1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )的结果。

解题思路:

  • 第1步:创建一个函数search_bracket_exp,通过re.rearch找到括号里面的表达式,传入到第二个函数用于表达式计算。返回一个新的表达式。express.replace(括号中的内容,第2步回的结果)
  • 第2步:创建一个函数get_no_bracket_express,先去掉括号。然后通过re.reacher找到带有乘和除的符号并计算结果。计算出的结果,express.replace(去掉括号中的内容,第3步返回的结果),如果表达式再也找不到乘除符号,则会剩下类似于9+-8--7+3+10这样的表达式,对这个的表达式+-,--处理成-,+,然后变成9-8+7+3+10,对该表达式进行re.findall等到一个List,遍历这个list,进行累加即可。
  • 第3步:创建一个函数mul_div,只对乘除进行计算,并返回结果。
  • 第4步:调试中发现,从第1点的括号全部处理完毕后,会等到1-2*-1388335.8476190479,这个时候再次调用第2步创建的get_no_bracket_express,即能返回最终的结果。

代码如下:

import re

def son_deal(exp): #此处类似于8+-9——10++9 8+9+10-11
  if '--'or '+-' in exp:
    exp= exp.replace('--','+') #'1-2*60-30+-8.0.0-10.0.0+2.3.300000000000002e+4.74950.0+5680.0.0--12.0.0-6.0'
    exp= exp.replace('+-','-')
    return exp
def add_minus_func(exp):
  lst = re.findall('-?\d*\.?\d*', exp)
  sum = 0.0
  if len(lst)==0:
    sum=float(exp)
  else:
    new_lst = filter(None, lst)
    for l in new_lst:
      l = float(l)
      sum += l
  return str(sum)
def mul_div(exp):
  print('ab值前的表达式:%s'%exp)
  if '*' in exp:
    a,b=exp.split('*')
    return str(float(a)*float(b))
  if '/' in exp:
    a, b = exp.split('/')
    print('a的值是%s,b的值是%s'%(a,b))
    print ('除后的结果:',str(float(a)/float(b)))
    return str(float(a)/float(b))


def get_no_bracket_express(exp):
    exp=exp.strip('()')
    while 1:
      ret=re.search(r'\d*\.?\d*[*/]-?\d*\.?\d*',exp)
      if ret:
        old_express=ret.group()
        exp = exp.replace(old_express,mul_div(old_express))
        print('括号里计算的表达式 ',exp)
      else:
        exp=son_deal(exp)
        print('去掉+-,--后的结果',exp)
        exp=add_minus_func(exp)
        return exp

#找出括号,返回替换后的值
def search_bracket_exp(exp):
  regex = r'\([^()]+\)'
  while 1:
    ret= re.search(regex, exp)
    if ret:
      new_exp_c=ret.group()
      print(new_exp_c)
      exp = exp.replace(new_exp_c, get_no_bracket_express(new_exp_c))
      print('去掉括号的结果',exp)
    else:
      #1-2*-1388328.8880952382
      exp =get_no_bracket_express(exp)
      return exp

express='1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
new_str=express.replace(' ','')
new_str=search_bracket_exp(new_str)
print(new_str)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python利用hook技术破解https的实例代码
Mar 25 Python
python实现数通设备端口监控示例
Apr 02 Python
Python自动生产表情包
Mar 17 Python
python读取中文txt文本的方法
Apr 12 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
Jun 09 Python
Python wxpython模块响应鼠标拖动事件操作示例
Aug 23 Python
django利用request id便于定位及给日志加上request_id
Aug 26 Python
如何使用Python 打印各种三角形
Jun 28 Python
wxPython之wx.DC绘制形状
Nov 19 Python
python如何爬取网页中的文字
Jul 28 Python
基于Python实现体育彩票选号器功能代码实例
Sep 16 Python
python Timer 类使用介绍
Dec 28 Python
python输出结果刷新及进度条的实现操作
Jul 13 #Python
python实现图像外边界跟踪操作
Jul 13 #Python
Python实现打包成库供别的模块调用
Jul 13 #Python
Python numpy矩阵处理运算工具用法汇总
Jul 13 #Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 #Python
Python使用pyexecjs代码案例解析
Jul 13 #Python
如何在VSCode下使用Jupyter的教程详解
Jul 13 #Python
You might like
9个实用的PHP代码片段分享
2015/01/22 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
枚举JavaScript对象的函数
2006/12/22 Javascript
javascript 兼容鼠标滚轮事件
2009/04/07 Javascript
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
javascript处理表单示例(javascript提交表单)
2014/04/28 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
jquery实现图片预加载
2015/12/25 Javascript
详解javascript高级定时器
2015/12/31 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
python比较两个列表大小的方法
2015/07/11 Python
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
在Python中给Nan值更改为0的方法
2018/10/30 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
Puppeteer使用示例详解
2019/06/20 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
2021/02/26 Python
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
计算机软件个人的自荐信范文
2013/12/01 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
县政府班子个人对照检查材料
2014/10/05 职场文书
出国留学自荐信模板
2015/03/06 职场文书
应收账款管理制度
2015/08/06 职场文书
创业计划书之宠物店
2019/09/19 职场文书
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android