亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python設(shè)計實現(xiàn)的計算器功能完整實例

 更新時間:2017年08月18日 10:58:30   作者:水·域  
這篇文章主要介紹了Python設(shè)計實現(xiàn)的計算器功能,結(jié)合完整實例形式分析了Python3.5實現(xiàn)計算器功能的正則、字符串及數(shù)值運算等相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了Python設(shè)計實現(xiàn)的計算器功能。分享給大家供大家參考,具體如下:

通過利用PYTHON 設(shè)計處理計算器的功能如:

1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 ))- (-4*3)/(16-3*2))

我的處理計算基本思路是:

解題思路是,需要優(yōu)先處理內(nèi)層括號運算--外層括號運算--先乘除后加減的原則:

1、正則處理用戶輸入的字符串,然后對其進行判斷,判斷計算公式是否有括號,有就先將計算公式進行正則處理,先獲取最里層的每一個數(shù)據(jù),然后一一計算

所要用到的正則是:

inner = re.search("\([^()]*\)", calc_input)

2、把有括號的計算公式計算出來的結(jié)果替換原來初始公式的位置,計算之前分別對重復運算符進行處理

需要處理的重復運算的函數(shù)是

def del_double(str):
  str = str.replace("++", "+")
  str = str.replace("--", "-")
  str = str.replace("+-","-")
  str = str.replace("- -","-")
  str = str.replace("+ +","+")
  return str

3、然后依次從里到外去除括號并進行計算,和位置替換

calc_input = calc_input.replace(inner.group(), str(ret))

將計算出來的結(jié)果分別替換原計算公式

4、最后得出沒有括號的公式,合并調(diào)用計算控制函數(shù)進行計算,中間需要注意的就是 負號 和數(shù)字與*在一起的處理,其它還算可以。

具體邏輯思路圖是:

以下是完整的代碼:

#!/usr/bin/env python3.5
# -*-coding:utf8-*-
import re
a =r'1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 ))- (-4*3)/(16-3*2))'
# */運算函數(shù)
def shengchu(str):
  calc = re.split("[*/]",str)   #用*/分割公式
  OP = re.findall("[*/]",str)  #找出所有*和/號
  ret = None
  for index,i in enumerate(calc):
    if ret:
      if OP[index-1] == "*":
        ret *= float(i)
      elif OP[index-1] == "/":
        ret /= float(i)
    else:
      ret = float(i)
  return ret
# 去掉重復運算,和處理特列+-符號
def del_double(str):
  str = str.replace("++", "+")
  str = str.replace("--", "-")
  str = str.replace("+-","-")
  str = str.replace("- -","-")
  str = str.replace("+ +","+")
  return str
# 計算主控制函數(shù)
def calc_contrl(str):
  tag = False
  str = str.strip("()") # 去掉最外面的括號
  str = del_double(str) # 調(diào)用函數(shù)處理重復運算
  find_ = re.findall("[+-]",str) # 獲取所有+- 操作符
  split_ = re.split("[+-]",str) #正則處理 以+-操作符進行分割,分割后 只剩*/運算符
  if len(split_[0].strip()) == 0: # 特殊處理
    split_[1] = find_[0] + split_[1] # 處理第一個數(shù)字前有“-”的情況,得到新的帶符號的數(shù)字
    # 處理第一個數(shù)字前為負數(shù)“-",時的情況,可能后面的操作符為“-”則進行標記
    if len(split_) == 3 and len(find_) ==2:
      tag =True
      del split_[0] # 刪除原分割數(shù)字
      del find_[0]
    else:
      del split_[0] # 刪除原分割數(shù)字
      del find_[0] # 刪除原分割運算符
  for index, i in enumerate(split_):
    # 去除以*或/結(jié)尾的運算數(shù)字
    if i.endswith("* ") or i.endswith("/ "):
      split_[index] = split_[index] + find_[index] + split_[index+1]
      del split_[index+1]
      del find_[index]
  for index, i in enumerate(split_):
    if re.search("[*/]",i): # 先計算含*/的公式
      sub_res = shengchu(i) #調(diào)用剩除函數(shù)
      split_[index] = sub_res
  # 再計算加減
  res = None
  for index, i in enumerate(split_):
    if res:
      if find_[index-1] == "+":
        res += float(i)
      elif find_[index-1] == "-":
        # 如果是兩個負數(shù)相減則將其相加,否則相減
        if tag == True:
          res += float(i)
        else:
          res -= float(i)
    else:
      # 處理沒有括號時會出現(xiàn)i 為空的情況
      if i != "":
        res = float(i)
  return res
if __name__ == '__main__':
  calc_input = input("請輸入計算公式,默認為:%s:" %a).strip()
  try:
    if len(calc_input) ==0:
      calc_input = a
    calc_input = r'%s'%calc_input # 做特殊處理,保持字符原形
    flag = True  # 初始化標志位
    result = None  # 初始化計算結(jié)果
    # 循環(huán)處理去括號
    while flag:
      inner = re.search("\([^()]*\)", calc_input)# 先獲取最里層括號內(nèi)的單一內(nèi)容
      #print(inner.group())
      # 有括號時計算
      if inner:
        ret = calc_contrl(inner.group()) # 調(diào)用計算控制函數(shù)
        calc_input = calc_input.replace(inner.group(), str(ret)) # 將運算結(jié)果,替換原處理索引值處對應的字符串
        print("處理括號內(nèi)的運算[%s]結(jié)果是:%s" % (inner.group(),str(ret)))
        #flag = True
      # 沒有括號時計算
      else:
        ret = calc_contrl(calc_input)
        print("最終計算結(jié)果為:%s"% ret)
        #結(jié)束計算標志
        flag = False
  except:
    print("你輸入的公式有誤請重新輸入!")

PS:這里為大家推薦幾款js實現(xiàn)的計算工具供大家參考借鑒:

在線一元函數(shù)(方程)求解計算工具:
http://tools.jb51.net/jisuanqi/equ_jisuanqi

科學計算器在線使用_高級計算器在線計算:
http://tools.jb51.net/jisuanqi/jsqkexue

在線計算器_標準計算器:
http://tools.jb51.net/jisuanqi/jsq

補充:

PYTHON正則表達式一覽:

模式 描述
^ 匹配字符串的開頭
$ 匹配字符串的末尾。
. 匹配任意字符,除了換行符,當re.DOTALL標記被指定時,則可以匹配包括換行符的任意字符。
[...] 用來表示一組字符,單獨列出:[amk] 匹配 'a','m'或'k
[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re* 匹配0個或多個的表達式。
re+ 匹配1個或多個的表達式。
re? 匹配0個或1個由前面的正則表達式定義的片段,非貪婪方式
re{ n}
re{ n,} 精確匹配n個前面表達式。
re{ n, m} 匹配 n 到 m 次由前面的正則表達式定義的片段,貪婪方式
a| b 匹配a或b
(re) G匹配括號內(nèi)的表達式,也表示一個組
(?imx) 正則表達式包含三種可選標志:i, m, 或 x 。只影響括號中的區(qū)域。
(?-imx) 正則表達式關(guān)閉 i, m, 或 x 可選標志。只影響括號中的區(qū)域。
(?: re) 類似 (...), 但是不表示一個組
(?imx: re) 在括號中使用i, m, 或 x 可選標志
(?-imx: re) 在括號中不使用i, m, 或 x 可選標志
(?#...) 注釋.
(?= re) 前向肯定界定符。如果所含正則表達式,以 ... 表示,在當前位置成功匹配時成功,否則失敗。但一旦所含表達式已經(jīng)嘗試,匹配引擎根本沒有提高;模式的剩余部分還要嘗試界定符的右邊。
(?! re) 前向否定界定符。與肯定界定符相反;當所含表達式不能在字符串當前位置匹配時成功
(?> re) 匹配的獨立模式,省去回溯。
\w 匹配字母數(shù)字
\W 匹配非字母數(shù)字
\s 匹配任意空白字符,等價于 [\t\n\r\f].
\S 匹配任意非空字符
\d 匹配任意數(shù)字,等價于 [0-9].
\D 匹配任意非數(shù)字
\A 匹配字符串開始
\Z 匹配字符串結(jié)束,如果是存在換行,只匹配到換行前的結(jié)束字符串。c
\z 匹配字符串結(jié)束
\G 匹配最后匹配完成的位置。
\b 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\n, \t, 等. 匹配一個換行符。匹配一個制表符。等
\1...\9 匹配第n個分組的子表達式。
\10 匹配第n個分組的子表達式,如果它經(jīng)匹配。否則指的是八進制字符碼的表達式。

另:再為大家提供2款非常方便的正則表達式工具供大家參考使用:

JavaScript正則表達式在線測試工具:
http://tools.jb51.net/regex/javascript

正則表達式在線生成工具:
http://tools.jb51.net/regex/create_reg

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)學運算技巧總結(jié)》、《Python正則表達式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • 使用Python對IP進行轉(zhuǎn)換的一些操作技巧小結(jié)

    使用Python對IP進行轉(zhuǎn)換的一些操作技巧小結(jié)

    這篇文章主要介紹了使用Python對IP進行轉(zhuǎn)換的一些操作技巧小結(jié),包括使用socket模塊里的相關(guān)函數(shù)和匿名函數(shù)實現(xiàn),需要的朋友可以參考下
    2015-11-11
  • pycharm?sql語句警告的處理

    pycharm?sql語句警告的處理

    這篇文章主要介紹了pycharm?sql語句警告的處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python+OpenCV實現(xiàn)尋找到圓點標定板的角點

    Python+OpenCV實現(xiàn)尋找到圓點標定板的角點

    這篇文章主要為大家詳細介紹了Python+OpenCV實現(xiàn)找到圓點標定板所有點后通過距離找兩個角點,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-11-11
  • Python實現(xiàn)帶圖形界面的炸金花游戲(升級版)

    Python實現(xiàn)帶圖形界面的炸金花游戲(升級版)

    詐金花又叫三張牌,是在全國廣泛流傳的一種民間多人紙牌游戲,它具有獨特的比牌規(guī)則。本文將通過Python語言實現(xiàn)升級版的帶圖形界面的詐金花游戲,需要的可以參考一下
    2022-12-12
  • Python中變量的作用域詳解

    Python中變量的作用域詳解

    大家好,本篇文章主要講的是Python中變量的作用域詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Python中異常重試的解決方案詳解

    Python中異常重試的解決方案詳解

    這篇文章主要給大家介紹了在Python中異常重試的解決方案,文中介紹的非常詳細,相信對大家學習或者使用python具有一定的參考學習價值,需要的朋友們下面隨著小編一起來看看吧。
    2017-05-05
  • django用戶登錄和注銷的實現(xiàn)方法

    django用戶登錄和注銷的實現(xiàn)方法

    這篇文章主要介紹了django用戶登錄和注銷的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 什么是Python中的匿名函數(shù)

    什么是Python中的匿名函數(shù)

    在本篇文章里小編給大家整理的是關(guān)于Python匿名函數(shù)知識點總結(jié),需要的朋友們可以學習參考下。
    2020-06-06
  • python圖片和二進制轉(zhuǎn)換的三種實現(xiàn)方式

    python圖片和二進制轉(zhuǎn)換的三種實現(xiàn)方式

    本文介紹了將PIL格式、數(shù)組和圖片轉(zhuǎn)換為二進制的不同方法,包括使用PIL庫、OpenCV和直接讀取二進制,此外,還提到了數(shù)據(jù)傳輸中base64格式的應用,這些信息對需要進行圖片數(shù)據(jù)處理和轉(zhuǎn)換的開發(fā)者非常有用
    2024-09-09
  • Python?httpstat命令行工具功能使用探索

    Python?httpstat命令行工具功能使用探索

    Python?httpstat是一個強大的命令行工具,用于深入了解HTTP請求的性能和狀態(tài)信息,本文將介紹Python?httpstat的基本用法、功能特性、示例代碼以及實際應用場景,幫助大家更好地理解和利用這個有用的工具
    2024-01-01

最新評論