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

Python 正則表達式實現(xiàn)計算器功能

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

需求:

用戶輸入運算表達式,終端顯示計算結(jié)果

代碼:

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

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

__author__ = 'Jack'

import re

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

def Mul(s):
 """計算表達式中的乘法運算"""
 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):
 """計算表達式中的除法運算"""
 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):
 """計算表達式中的加法運算"""
 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):
 """計算表達式中的減法運算"""
 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)]) # 將表達式按空格分割并重組
   if not s.startswith('('): # 若用戶輸入的表達式首尾無括號,則統(tǒng)一格式化為:(表達式)
    s = str('(%s)' % s)
   while bracket.search(s): # 若表達式s存在括號
    s = s.replace('--', '+') # 檢查表達式,并將--運算替換為+運算
    s_search = bracket.search(s).group() # 將最內(nèi)層括號及其內(nèi)容賦給變量s_search
    if div.search(s_search): # 若除法運算存在(必須放在乘法之前)
     s = s.replace(s_search, Div(s_search)) # 執(zhí)行除法運算并將結(jié)果替換原表達式
    elif mul.search(s_search): # 若乘法運算存在
     s = s.replace(s_search, Mul(s_search)) # 執(zhí)行乘法運算并將結(jié)果替換原表達式
    elif sub.search(s_search): # 若減法運算存在(必須放在加法之前)
     s = s.replace(s_search, Sub(s_search)) # 執(zhí)行減法運算并將結(jié)果替換原表達式
    elif add.search(s_search): # 若加法運算存在
     s = s.replace(s_search, Add(s_search)) # 執(zhí)行加法運算并將結(jié)果替換原表達式
    elif c_f.search(s_search): # 若括號內(nèi)無任何運算(類似(-2.32)除外)
     s = s.replace(s_search, strip.search(s_search).group()) # 將括號脫掉,例:(-2.32)---> -2.32

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

運行效果:

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

最新評論

达日县| 阿鲁科尔沁旗| 平山县| 保山市| 泸水县| 获嘉县| 通海县| 石首市| 罗甸县| 河津市| 濮阳市| 云南省| 津南区| 胶州市| 谷城县| 泰宁县| 广安市| 江西省| 随州市| 星子县| 曲松县| 昭通市| 高淳县| 菏泽市| 隆安县| 武强县| 安远县| 襄汾县| 石首市| 栖霞市| 安岳县| 雷山县| 巩义市| 新津县| 威海市| 商丘市| 西乌珠穆沁旗| 调兵山市| 宁阳县| 巴里| 大石桥市|