欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)里的值,算出來(lái)后再算乘除,再算加減''' 
 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)文章

  • Django中使用 Closure Table 儲(chǔ)存無(wú)限分級(jí)數(shù)據(jù)

    Django中使用 Closure Table 儲(chǔ)存無(wú)限分級(jí)數(shù)據(jù)

    對(duì)于數(shù)據(jù)量大的情況(比如用戶之間有邀請(qǐng)鏈,有點(diǎn)三級(jí)分銷的意思),就要用到 closure table 的結(jié)構(gòu)來(lái)進(jìn)行存儲(chǔ)。這篇文章主要介紹了Django中使用 Closure Table 儲(chǔ)存無(wú)限分級(jí)數(shù)據(jù),需要的朋友可以參考下
    2019-06-06
  • python3 圖片referer防盜鏈的實(shí)現(xiàn)方法

    python3 圖片referer防盜鏈的實(shí)現(xiàn)方法

    本篇文章主要介紹了python3 圖片referer防盜鏈的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 使用pyinstaller逆向.pyc文件

    使用pyinstaller逆向.pyc文件

    這篇文章主要介紹了使用pyinstaller逆向.pyc文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • python設(shè)置 matplotlib 正確顯示中文的四種方式

    python設(shè)置 matplotlib 正確顯示中文的四種方式

    這篇文章主要介紹了python設(shè)置 matplotlib 正確顯示中文的四種方式,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-05-05
  • Python Pygame中精靈和碰撞檢測(cè)詳解

    Python Pygame中精靈和碰撞檢測(cè)詳解

    對(duì)于游戲中出現(xiàn)的每一樣?xùn)|西,比如磚塊箱子水管地面,還有人物都可以看成是一個(gè)獨(dú)立的物體,所以每個(gè)物體類都繼承了pygame的精靈類pg.sprite.Sprite,這篇文章主要給大家介紹了關(guān)于Python Pygame中精靈和碰撞檢測(cè)的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • python生成并處理uuid的實(shí)現(xiàn)方式

    python生成并處理uuid的實(shí)現(xiàn)方式

    這篇文章主要介紹了python生成并處理uuid的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • python與js主要區(qū)別點(diǎn)總結(jié)

    python與js主要區(qū)別點(diǎn)總結(jié)

    在本篇內(nèi)容里小編給大家整理了關(guān)于python與js主要區(qū)別點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-09-09
  • Python中對(duì)元組和列表按條件進(jìn)行排序的方法示例

    Python中對(duì)元組和列表按條件進(jìn)行排序的方法示例

    這篇文章主要介紹了Python中對(duì)元組和列表按條件進(jìn)行排序的方法示例,需要的朋友可以參考下
    2015-11-11
  • 使用Python腳本將文字轉(zhuǎn)換為圖片的實(shí)例分享

    使用Python腳本將文字轉(zhuǎn)換為圖片的實(shí)例分享

    這篇文章主要介紹了使用Python腳本將文字轉(zhuǎn)換為圖片的實(shí)例分享,主要用到了PIL庫(kù),需要的朋友可以參考下
    2015-08-08
  • 深入解析NumPy中的Broadcasting廣播機(jī)制

    深入解析NumPy中的Broadcasting廣播機(jī)制

    在吳恩達(dá)老師的深度學(xué)習(xí)專項(xiàng)課程中,老師有提到NumPy中的廣播機(jī)制,同時(shí)那一周的測(cè)驗(yàn)也有涉及到廣播機(jī)制的題目。那么,到底什么是NumPy中的廣播機(jī)制?本文就來(lái)介紹一下
    2021-05-05

最新評(píng)論