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

Python 正則表達(dá)式實(shí)現(xiàn)計(jì)算器功能

 更新時(shí)間:2017年04月29日 11:10:39   作者:jack-boy  
本篇文章主要介紹了Python 正則表達(dá)式實(shí)現(xiàn)計(jì)算器功能的示例。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧

需求:

用戶輸入運(yùn)算表達(dá)式,終端顯示計(jì)算結(jié)果

代碼:

# !/usr/bin/env/ python3
# -*- coding: utf-8 -*-

"""用戶輸入計(jì)算表達(dá)式,顯示計(jì)算結(jié)果"""

__author__ = 'Jack'

import re

bracket = re.compile(r'\([^()]+\)') # 尋找最內(nèi)層括號(hào)規(guī)則
mul = re.compile(r'(\d+\.?\d*\*-\d+\.?\d*)|(\d+\.?\d*\*\d+\.?\d*)') # 尋找乘法運(yùn)算規(guī)則
div = re.compile(r'(\d+\.?\d*/-\d+\.?\d*)|(\d+\.?\d*/\d+\.?\d*)') # 尋找除法運(yùn)算規(guī)則
add = re.compile(r'(-?\d+\.?\d*\+-\d+\.?\d*)|(-?\d+\.?\d*\+\d+\.?\d*)') # 尋找加法運(yùn)算規(guī)則
sub = re.compile(r'(\d+\.?\d*--\d+\.?\d*)|(\d+\.?\d*-\d+\.?\d*)') # 尋找減法運(yùn)算規(guī)則
c_f = re.compile(r'\(?\+?-?\d+\)?') # 檢查括號(hào)內(nèi)是否運(yùn)算完畢規(guī)則
strip = re.compile(r'[^(].*[^)]') # 脫括號(hào)規(guī)則

def Mul(s):
 """計(jì)算表達(dá)式中的乘法運(yùn)算"""
 exp = re.split(r'\*', mul.search(s).group())
 return s.replace(mul.search(s).group(), str(float(exp[0]) * float(exp[1])))

def Div(s):
 """計(jì)算表達(dá)式中的除法運(yùn)算"""
 exp = re.split(r'/', div.search(s).group())
 return s.replace(div.search(s).group(), str(float(exp[0]) / float(exp[1])))

def Add(s):
 """計(jì)算表達(dá)式中的加法運(yùn)算"""
 exp = re.split(r'\+', add.search(s).group())
 return s.replace(add.search(s).group(), str(float(exp[0]) + float(exp[1])))

def Sub(s):
 """計(jì)算表達(dá)式中的減法運(yùn)算"""
 exp = re.split(r'-', sub.search(s).group())
 return s.replace(sub.search(s).group(), str(float(exp[0]) - float(exp[1])))

def calc():
 while True:
  s = input('Please input the expression(q for quit):') # 例:'1+2- (3* 4-3/2+ ( 3-2*(3+ 5 -3* -0.2-3.3*2.2 -8.5/ 2.4 )+10) +10)'
  if s == 'q':
   break
  else:
   s = ''.join([x for x in re.split('\s+', s)]) # 將表達(dá)式按空格分割并重組
   if not s.startswith('('): # 若用戶輸入的表達(dá)式首尾無(wú)括號(hào),則統(tǒng)一格式化為:(表達(dá)式)
    s = str('(%s)' % s)
   while bracket.search(s): # 若表達(dá)式s存在括號(hào)
    s = s.replace('--', '+') # 檢查表達(dá)式,并將--運(yùn)算替換為+運(yùn)算
    s_search = bracket.search(s).group() # 將最內(nèi)層括號(hào)及其內(nèi)容賦給變量s_search
    if div.search(s_search): # 若除法運(yùn)算存在(必須放在乘法之前)
     s = s.replace(s_search, Div(s_search)) # 執(zhí)行除法運(yùn)算并將結(jié)果替換原表達(dá)式
    elif mul.search(s_search): # 若乘法運(yùn)算存在
     s = s.replace(s_search, Mul(s_search)) # 執(zhí)行乘法運(yùn)算并將結(jié)果替換原表達(dá)式
    elif sub.search(s_search): # 若減法運(yùn)算存在(必須放在加法之前)
     s = s.replace(s_search, Sub(s_search)) # 執(zhí)行減法運(yùn)算并將結(jié)果替換原表達(dá)式
    elif add.search(s_search): # 若加法運(yùn)算存在
     s = s.replace(s_search, Add(s_search)) # 執(zhí)行加法運(yùn)算并將結(jié)果替換原表達(dá)式
    elif c_f.search(s_search): # 若括號(hào)內(nèi)無(wú)任何運(yùn)算(類似(-2.32)除外)
     s = s.replace(s_search, strip.search(s_search).group()) # 將括號(hào)脫掉,例:(-2.32)---> -2.32

   print('The answer is: %.2f' % (float(s)))
if __name__ == '__main__':
 calc()

運(yùn)行效果:

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • Python批量刪除或移動(dòng)指定圖像的實(shí)現(xiàn)示例

    Python批量刪除或移動(dòng)指定圖像的實(shí)現(xiàn)示例

    本文主要介紹了Python批量刪除或移動(dòng)指定圖像,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Pytest?fixture及conftest相關(guān)詳解

    Pytest?fixture及conftest相關(guān)詳解

    這篇文章主要介紹了Pytest?fixture及conftest相關(guān)詳解,fixture是在測(cè)試函數(shù)運(yùn)行前后,由pytest執(zhí)行的外殼函數(shù),更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-09-09
  • Python 處理數(shù)據(jù)的實(shí)例詳解

    Python 處理數(shù)據(jù)的實(shí)例詳解

    這篇文章主要介紹了Python 處理數(shù)據(jù)的實(shí)例詳解的相關(guān)資料,這里主要介紹Python 常用的基礎(chǔ)知識(shí)并附實(shí)例,需要的朋友可以參考下
    2017-08-08
  • 基于Python測(cè)試程序是否有錯(cuò)誤

    基于Python測(cè)試程序是否有錯(cuò)誤

    這篇文章主要介紹了基于Python測(cè)試程序是否有錯(cuò)誤,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • jupyter lab的目錄調(diào)整及設(shè)置默認(rèn)瀏覽器為chrome的方法

    jupyter lab的目錄調(diào)整及設(shè)置默認(rèn)瀏覽器為chrome的方法

    這篇文章主要介紹了jupyter lab的目錄調(diào)整及設(shè)置默認(rèn)瀏覽器為chrome的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • python 實(shí)現(xiàn)漢諾塔游戲

    python 實(shí)現(xiàn)漢諾塔游戲

    這篇文章主要介紹了python 實(shí)現(xiàn)漢諾塔游戲的示例,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-11-11
  • matplotlib 向任意位置添加一個(gè)子圖(axes)

    matplotlib 向任意位置添加一個(gè)子圖(axes)

    這篇文章主要介紹了matplotlib 向任意位置添加一個(gè)子圖(axes),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python線程優(yōu)先級(jí)隊(duì)列知識(shí)點(diǎn)總結(jié)

    python線程優(yōu)先級(jí)隊(duì)列知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的一篇關(guān)于python線程優(yōu)先級(jí)隊(duì)列知識(shí)點(diǎn)總結(jié),有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-02-02
  • Tensorflow中的圖(tf.Graph)和會(huì)話(tf.Session)的實(shí)現(xiàn)

    Tensorflow中的圖(tf.Graph)和會(huì)話(tf.Session)的實(shí)現(xiàn)

    這篇文章主要介紹了Tensorflow中的圖(tf.Graph)和會(huì)話(tf.Session)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 特征臉(Eigenface)理論基礎(chǔ)之PCA主成分分析法

    特征臉(Eigenface)理論基礎(chǔ)之PCA主成分分析法

    這篇文章主要為大家詳細(xì)介紹了特征臉理論基礎(chǔ)之PCA主成分分析法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評(píng)論