這裡的範例是可在 Python 3 執行的獨立小程式;輸出框是預先核對的結果。題庫作答時,請保留題目提供的 solve 與參數,使用 return 交回答案。模組章的雙檔範例會另外標明操作方式。
01|模組把相關功能整理在一起
模組是可以匯入的程式單位;一般自訂模組常是一個 .py 檔案。Python 的標準函式庫提供許多常用功能,使用前先 import,再用模組名稱.功能名稱呼叫,讀程式時就知道功能從哪裡來。
import math
print(math.sqrt(81))
print(math.isqrt(20))9.0 4
02|三種常見的匯入寫法
import math 保留模組前綴,最適合初學時辨認來源;from math import ceil 只引入指定名稱;as 可以取別名。避免 from module import *,因為很難一眼看出名稱來源,也容易和自己的變數衝突。
import math as m
from math import ceil
print(m.floor(4.8))
print(ceil(4.2))
print(m.gcd(18, 24))4 5 6
03|math:先確認輸入與回傳型態
math 提供向下取整 floor、向上取整 ceil、最大公因數 gcd 等功能。選工具之前先確認輸入是否在允許範圍。遇到需要精確整數判斷的題目,優先用整數工具,避免不必要的浮點轉換。
import math
length = 17
piece = 5
print(math.ceil(length / piece))
print(math.floor(-2.1))
print(math.isqrt(49) ** 2 == 49)4 -3 True
04|statistics:平均數與中位數
mean 是平均數;median 是排序後的中間位置,偶數筆時取中間兩筆的平均。兩者描述資料的角度不同。一般呼叫需要非空資料;先判斷空清單要如何處理,不要直接把例子套到所有輸入。
import statistics
values = [2, 4, 8, 10]
print(statistics.mean(values))
print(statistics.median(values))
print(statistics.median([1, 3, 100]))6 6.0 3
05|json:文字與 Python 資料互轉
JSON 是交換資料的文字格式。json.loads 把 JSON 字串轉成 Python 的字典、清單等資料;json.dumps 把 Python 資料轉成 JSON 文字。loads 的 s 可以聯想成 string;這裡不需要開檔,也不會連線。
import json
text = '{"name": "小芽", "done": false, "scores": [3, 5]}'
record = json.loads(text)
print(record["done"])
record["done"] = True
print(json.dumps(record, ensure_ascii=False))False
{"name": "小芽", "done": true, "scores": [3, 5]}06|datetime:把日期當日期處理
日期不是普通數字,也不適合直接對文字加 1。date 表示年月日,timedelta 表示一段時間;相減得到時間差。練習使用固定日期,結果就不會每天改變,也不需要時區或即時網路資料。
from datetime import date, timedelta
start = date(2024, 2, 28)
after_two_days = start + timedelta(days=2)
print(after_two_days.isoformat())
print((date(2024, 3, 3) - start).days)
print(date.fromisoformat("2025-01-15").month)2024-03-01 4 1
07|自訂模組:兩個檔案合作
在自己的電腦上,可以把重複用到的函式存成 price_tools.py,另一個 main.py 再匯入。這是兩個檔案,不是把下面全部貼進同一個檔案。執行 main.py 時,Python 會尋找同一目錄中的 price_tools。
本站題庫是單一程式編輯區,沒有上傳自訂模組檔案的功能。本站作答時把 helper 與 solve 放在同一份程式即可;下例用來理解本機專案如何拆檔。
# 檔案一:price_tools.py
def total(price, quantity):
return price * quantity
# 檔案二:main.py(與 price_tools.py 放在同一目錄)
import price_tools
print(price_tools.total(10, 3))30
08|可以 import,不代表什麼功能都能使用
模組會受到執行環境限制。本站試跑在瀏覽器的隔離 Python 環境中,題目使用可離線運作的標準功能;不需安裝套件、連外查詢、讀取你的電腦檔案,或輸入密鑰。若想了解某個函式,先看官方文件的參數、回傳值與錯誤情況,再用小資料試一次。
- import 成功後,仍要選對模組裡的函式。
- 第三方套件與標準模組不同,本課不需要執行 pip install。
- 模組題的 solve 仍要回傳題目要求的基本資料,不回傳 module 或日期物件本身;日期可依題意轉為文字。
WHEN SOMETHING GOES WRONG
遇到錯誤,先檢查這裡
import math 後直接寫 sqrt
只匯入模組時,要寫 math.sqrt。若用 from math import sqrt,才會直接得到 sqrt 這個名稱。
混淆 JSON 字串與字典
字串要先 loads 才能用鍵取資料;dict 本身則不需要 loads。先用 type 檢查手上的資料。
用今天日期作為固定測資
結果會隨日期變動。題庫要使用傳入的日期或明確固定日期,才有一致且可重現的結果。
PAUSE AND TRY
先不要急著看別人的寫法
- 對 [1, 2, 3, 4, 100] 比較平均數和中位數,解釋它們為什麼差很多。
- 將 JSON 的 done 改為 null,loads 後會得到哪一種 Python 值?
- 用 date 與 timedelta 找出 2024-12-31 的隔天,不自己處理月份進位。
先用紙筆預測,再改動範例中的數字或文字。結果與預期不同時,找出最早開始不同的那一步。
把這幾件事帶走
- 先 import,再用明確的名稱呼叫功能。
- 看清楚輸入限制、回傳型態與例外。
- 模組幫你整理工具;solve 仍負責交回題目需要的結果。
FROM READING TO PRACTICE
用三道免費題,練習本章觀念
先做簡單題確認語法,再把幾個步驟組合起來。三題都來自本章主題的新版免費題庫,難度表示需要組合的基本概念。
延伸閱讀:Python 官方文件
以下是本章查證使用的官方資料。可以先完成入門練習,再回來查閱更完整的參數與說明。