Python 入門指南 V2.00 - 單元 21 - 認識標準模組庫及 Tk




Python 已經內建大多數常用的功能,更多的功能都放在標準模組庫 (standard library) 裡



例如以下程式示範時間、日期方面的模組 (module)


001import datetime
002
003now = datetime.datetime.now()
004year = datetime.date.today().strftime("%Y")
005month = datetime.date.today().strftime("%B")
006wday = datetime.date.today().strftime("%A")
007
008print("Current date and time: ", now)
009print("Current year: ", year)
010print("Month of the year: ", month)
011print("Day of the week: ", wday)
012 
013# 檔名: library_demo.py 
014# 作者: Kaiching Chang 
015# 時間: July, 2014

datetimedatetime 物件的 now() 方法回傳在地現在日期、時間的格式化字串, date 物件的 today() 回傳在地今日的日期物件, strftime() 方法回傳格式化日期字串。


執行結果如下



以下程式示範正規運算式 (regular expression) 方面的模組


001import re
002
003str = "There is no spoon."
004
005v1 = re.sub(r"a""e", str)
006v2 = re.sub(r"e""i", v1)
007v3 = re.sub(r"i""o", v2)
008v4 = re.sub(r"o""u", v3)
009v5 = re.sub(r"u""a", v4)
010
011print(v5)
012 
013# 檔名: library_demo2.py 
014# 作者: Kaiching Chang 
015# 時間: July, 2014

re 中的 sub() 函數 (function) 用來作字串 (string) 替換,此例將 str 中的所有母音字母都換成 a


執行結果如下



另外像預設的浮點數 (floating-point number) 可能會有誤差,這時使用 decimal 模組就可以完全避免誤差的產生,例如


001from decimal import *
002  
003print()
004print(round(0.7 * 1.05, 2))
005print(round(Decimal("0.7") * Decimal("1.05"), 2))
006print()
007print(1.00 % 0.10)
008print(Decimal("1.00") % Decimal("0.10"))
009print()
010print(1 / 7)
011print(Decimal("1") / Decimal("7"))
012print()
013 
014# 檔名: library_demo3.py 
015# 作者: Kaiching Chang 
016# 時間: July, 2014

執行結果如下



有些誤差很小,有些誤差難以預期,如果使用標準模組庫的 decimal 就沒有誤差的問題了。


依官方的 Library Reference ,其他還有


  • 文字處理
  • 二進位資料處理
  • 其他資料型態
  • 數字及數學相關
  • 函數程式設計
  • 檔案及目錄存取
  • 資料儲存與資料庫
  • 檔案壓縮與存檔
  • 檔案格式
  • 密碼相關
  • 作業系統服務
  • 並行計算
  • 網路相關
  • 標記語言工具
  • 網路協定相關
  • 多媒體
  • 程式框架
  • 圖形介面
  • 開發工具
  • 除錯工具
  • 執行時期服務
  • 直譯器相關
  • 模組引入
  • Python 語言服務
  • MS 系統服務
  • Unix 系統服務

標準模組庫幾乎涵蓋各種應用,我們接下來要替 Encrypt 類別 (class) 發展一個圖形介面 (graphical interface) ,就是用標準模組庫中的 tkinter 模組,這是跟 Tk 圖形介面程式庫連結的模組,讓使用者 (user) 可以輕鬆的編碼、解碼囉!


中英文術語對照


標準模組庫standard library
模組module
正規運算式regular expression
函數function
字串string
浮點數floating-point number
類別class
圖形介面graphical interface
使用者user

重點整理


  1. 標準模組庫具備各方面的應用,包括文字處理、二進位資料處理、數字及數學相關、函數程式設計、檔案及目錄存取等等。
  2. datetime 為時間、日期方面的模組。
  3. re 為正規運算式方面的模組。
  4. decimal 模組可避免浮點數的誤差。
  5. 標準模組庫在 GUI 方面整合 Tk ,模組庫名稱為 tkinter

問題與討論


  1. 為什麼要有標準模組庫?難道不能把所有功能都直接內建嗎?
  2. 為什麼預設的浮點數型態會有誤差?這誤差是怎麼造成的呢?

練習


  1. 承接上一個單元的猜數字遊戲,將新程式寫在 guessgame.py 中,整合 find_number() 及 ab_counter() 使之成為 GuessGame 類別的方法,注意參數的數量可能會有改變。
  2. 承上題,繼續完成 GuessGame 類別,新增一個 run() 方法,將命令列的執行部分寫在 run() 裡。

the end

沒有留言: