最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python正則實(shí)現(xiàn)計(jì)算器功能

 更新時(shí)間:2017年12月14日 11:32:06   作者:THE_Gogh  
這篇文章主要為大家詳細(xì)介紹了python正則實(shí)現(xiàn)計(jì)算器功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了python正則實(shí)現(xiàn)計(jì)算器功能的具體代碼,供大家參考,具體內(nèi)容如下

# -*- coding: utf-8 -*- 
# Author :Gogh 
# @Time  :2017/12/4 20:16 
# @Email :361910002@qq.com 
import re 
def operator_update(formula): 
 # 對(duì)formula公式進(jìn)行 去除空字符,更新運(yùn)算符處理 
 formula = formula.replace(" ", "") # 去除空字符 
 formula = formula.replace("+-", "-") 
 formula = formula.replace("--", "+") 
 return formula 
 
 
def calc_muldiv(formula_list): 
 ''''' 
 計(jì)算公式里面的乘除 
 :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): 
 ''''' 
 計(jì)算列表數(shù)字的加減 
 :param operators: 運(yùn)算符列表 
 :param num_list: 進(jìn)行運(yùn)算的數(shù)字列表 
 :return: 返回計(jì)算結(jié)果 
 ''' 
 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): 
 ''''' 
 對(duì)括號(hào)最內(nèi)層的formula公式進(jìn)行計(jì)算 
 :param formula: 
 :return: 
 ''' 
 formula = re.sub("[()]", "", formula) # 去除兩邊的() 
 formula = operator_update(formula) 
 plus_minus_operator = re.findall("[+-]", formula) # 列表 '+' '-' 運(yùn)算符 
 multiply_divide_list = re.split("[+-]", formula) # 列表 有'*' '/' 
 if multiply_divide_list[0] == "": # multiply_divide_list列表第一個(gè)字符為空的話,表示一個(gè)數(shù)字為負(fù)號(hào) 
  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] # 列表 '+' '-' 運(yùn)算符 進(jìn)行合并處理 
 multiply_divide_list = res[1] 
 plus_minus_list = calc_muldiv(multiply_divide_list) # 生成只進(jìn)行加減運(yùn)算的列表 
 res = calc_plumin(plus_minus_operator, plus_minus_list) 
 return res 
 
 
def calculate(formula): 
 '''''計(jì)算程序主入口, 主要邏輯是先計(jì)算拓號(hào)里的值,算出來后再算乘除,再算加減''' 
 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結(jié)果:%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)

 以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 利用python實(shí)現(xiàn)短信和電話提醒功能的例子

    利用python實(shí)現(xiàn)短信和電話提醒功能的例子

    今天小編就為大家分享一篇利用python實(shí)現(xiàn)短信和電話提醒功能的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • http請(qǐng)求 request失敗自動(dòng)重新嘗試代碼示例

    http請(qǐng)求 request失敗自動(dòng)重新嘗試代碼示例

    這篇文章主要介紹了http請(qǐng)求 request失敗自動(dòng)重新嘗試代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Pandas缺失值2種處理方式代碼實(shí)例

    Pandas缺失值2種處理方式代碼實(shí)例

    這篇文章主要介紹了Pandas缺失值2種處理方式代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Python PyInstaller安裝和使用教程詳解

    Python PyInstaller安裝和使用教程詳解

    這篇文章主要介紹了Python PyInstaller安裝和使用教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • tensorflow對(duì)圖像進(jìn)行拼接的例子

    tensorflow對(duì)圖像進(jìn)行拼接的例子

    今天小編就為大家分享一篇tensorflow對(duì)圖像進(jìn)行拼接的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 如何在?ASP.NET?Core?中創(chuàng)建?gRPC?客戶端和服務(wù)器

    如何在?ASP.NET?Core?中創(chuàng)建?gRPC?客戶端和服務(wù)器

    gRPC 是一種高性能、開源的遠(yuǎn)程過程調(diào)用(RPC)框架,它基于 Protocol Buffers(protobuf)定義服務(wù),并使用 HTTP/2 協(xié)議進(jìn)行通信,這篇文章主要介紹了在?ASP.NET?Core?中創(chuàng)建?gRPC?客戶端和服務(wù)器,需要的朋友可以參考下
    2024-11-11
  • 基于Python實(shí)現(xiàn)的車牌識(shí)別系統(tǒng)

    基于Python實(shí)現(xiàn)的車牌識(shí)別系統(tǒng)

    本文將以基于Python的車牌識(shí)別系統(tǒng)實(shí)現(xiàn)為方向,介紹車牌識(shí)別技術(shù)的基本原理、常用算法和方法,并詳細(xì)講解如何利用Python語言實(shí)現(xiàn)一個(gè)完整的車牌識(shí)別系統(tǒng),需要的朋友可以參考下
    2023-10-10
  • django自定義模板標(biāo)簽過程解析

    django自定義模板標(biāo)簽過程解析

    這篇文章主要介紹了django自定義模板標(biāo)簽過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • python實(shí)現(xiàn)fenwick tree芬威克樹算法案例

    python實(shí)現(xiàn)fenwick tree芬威克樹算法案例

    芬威克樹,又稱為二叉索引樹或樹狀數(shù)組,是一種高效的數(shù)據(jù)結(jié)構(gòu),由Peter M. Fenwick于1994年提出,主要用于計(jì)算數(shù)組的前綴和以及支持對(duì)數(shù)時(shí)間復(fù)雜度的元素更新,通過維護(hù)一個(gè)特定的數(shù)組,利用整數(shù)的二進(jìn)制特性進(jìn)行區(qū)間和存儲(chǔ)
    2024-10-10
  • Python列表常用函數(shù)使用詳解

    Python列表常用函數(shù)使用詳解

    這篇文章主要為大家介紹了Python列表常用的一些函數(shù)的使用詳解,并通過一些簡(jiǎn)單的案例讓大家更快的理解,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2021-12-12

最新評(píng)論

类乌齐县| 洞头县| 锡林浩特市| 县级市| 定襄县| 曲周县| 彩票| 深圳市| 沁阳市| 石嘴山市| 武川县| 平谷区| 普洱| 历史| 司法| 庄浪县| 台南县| 水富县| 永登县| 甘肃省| 宿松县| 大宁县| 岐山县| 建始县| 延庆县| 南召县| 九台市| 清远市| 南宫市| 许昌县| 通道| 乐都县| 临清市| 卓尼县| 安远县| 阿克| 靖西县| 丰台区| 沂源县| 潼南县| 东乌珠穆沁旗|