侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python正则实现计算器功能

Python  /  管理员 发布于 7年前   213

本文实例为大家分享了python正则实现计算器功能的具体代码,供大家参考,具体内容如下

# -*- coding: utf-8 -*- # Author :Gogh # @Time  :2017/12/4 20:16 # @Email :[email protected] import re def operator_update(formula):  # 对formula公式进行 去除空字符,更新运算符处理  formula = formula.replace(" ", "") # 去除空字符  formula = formula.replace("+-", "-")  formula = formula.replace("--", "+")  return formula   def calc_muldiv(formula_list):  '''''  计算公式里面的乘除  :param formula: 列表  :return:  '''  for index, element in enumerate(formula_list):   if "*" in element or "/" in element:    operators = re.findall("[*/]", element)    calc_list = re.split("[*/]", element)    num = None    for i, e in enumerate(calc_list):     if num:      if operators[i - 1] == "*":       num *= float(e)      elif operators[i - 1] == "/":       num /= float(e)     else:      num = float(e)    formula_list[index] = num  return formula_list   def calc_plumin(operators, num_list):  '''''  计算列表数字的加减  :param operators: 运算符列表  :param num_list: 进行运算的数字列表  :return: 返回计算结果  '''  num = None  for i, e in enumerate(num_list):   if num:    if operators[i - 1] == "+":     num += float(e)    elif operators[i - 1] == "-":     num -= float(e)   else:    num = float(e)  return num   def merge(plus_minus_operator, multiply_divide_list):  '''''  把列表中这样的形式'2*' '-3*' '5/3*' '4/2'合并到一块  :param formula_list:  :return:  '''  for index, element in enumerate(multiply_divide_list):   if element.endswith("*") or element.endswith("/"):    multiply_divide_list[index] = element + plus_minus_operator[index] + multiply_divide_list[index + 1]    del multiply_divide_list[index + 1]    del plus_minus_operator[index]    return merge(plus_minus_operator, multiply_divide_list)  return plus_minus_operator, multiply_divide_list   def bracket_calc(formula):  '''''  对括号最内层的formula公式进行计算  :param formula:  :return:  '''  formula = re.sub("[()]", "", formula) # 去除两边的()  formula = operator_update(formula)  plus_minus_operator = re.findall("[+-]", formula) # 列表 '+' '-' 运算符  multiply_divide_list = re.split("[+-]", formula) # 列表 有'*' '/'  if multiply_divide_list[0] == "": # multiply_divide_list列表第一个字符为空的话,表示一个数字为负号   multiply_divide_list[1] = "-" + multiply_divide_list[1]   del plus_minus_operator[0]   del multiply_divide_list[0]  res = merge(plus_minus_operator, multiply_divide_list)  plus_minus_operator = res[0] # 列表 '+' '-' 运算符 进行合并处理  multiply_divide_list = res[1]  plus_minus_list = calc_muldiv(multiply_divide_list) # 生成只进行加减运算的列表  res = calc_plumin(plus_minus_operator, plus_minus_list)  return res   def calculate(formula):  '''''计算程序主入口, 主要逻辑是先计算拓号里的值,算出来后再算乘除,再算加减'''  while True:   formula_depth = re.search("[()]+", formula)   if formula_depth:    formula_depth = formula_depth.group()    res = bracket_calc(formula_depth)    formula = formula.replace(formula_depth, str(res))    print("\33[34;1m%s\33[0m" % (formula))   else:    res = bracket_calc(formula)    print("\33[31;1m结果:%s\33[0m" % (res))    exit()   if __name__ == '__main__':  formula = "1 - 2 * ( (60-30 +(-9-2- 5-2*-3-5/3-40*4/2-3/5+6*3) * (-9-2-5-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) -(-4*3)/ (16-3*2) )"  calculate(formula)

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


  • 上一条:
    python实现发送邮件功能代码
    下一条:
    Python数据结构与算法之使用队列解决小猫钓鱼问题
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客