資料工程中階・清洗、彙總與配對
這一頁是題幹試閱;登入/註冊後每題可以在瀏覽器裡執行、對答案,第一次交對 +10 XP。
- 01
函數的練習
容易會員資料裡的手機號碼格式很亂。請寫一個函數 normalize_phone(s),規則如下:
- 只保留數字(去掉空白、橫線、括號、加號)
- 若以 886 開頭,把開頭的 886 換成 0
- 結果必須是 10 碼且以 09 開頭,回傳 'XXXX-XXX-XXX' 格式;否則回傳 '格式錯誤'
用以下資料(hard code 於程式中)逐筆呼叫並印出「原始值 -> 結果」:
raw = ['0912-345-678', '+886 912 345 678', '(02)2345-6789', '0912345', '886-987-654-321']
作答登入後可作答 - 02
綜合的練習
容易以下是訂單資料,每筆是(城市, 金額)的 tuple(資料 hard code 於程式中):
orders = [('台北', 1200), ('台中', 800), ('台北', 450), ('高雄', 990), ('台中', 1500), ('台北', 300), ('高雄', 210)]
不使用 pandas,用字典做「分組彙總」:算出每個城市的訂單數與總金額,
依總金額由大到小印出。
輸出格式(每個城市一行):
城市 筆數 筆 總額 元
作答登入後可作答 - 03
迴圈的練習
中等以下是一週每天的新註冊人數(資料 hard code 於程式中):
signups = [12, 18, 9, 21, 30, 15, 24]
輸入視窗大小 k,計算「k 日移動平均」:從第 k 天起,每天取包含當天在內的前 k 天平均(四捨五入到小數第 1 位)。
若 k 小於 1 或大於資料天數,印出「視窗大小錯誤」。
輸出格式(第 k 天開始每天一行):
第 (天數) 天: (平均)
作答登入後可作答 - 04
函數的練習
中等商品清單如下(資料 hard code 於程式中,名稱不重複):
items = [('耳機', 120), ('滑鼠', 380), ('鍵盤', 260), ('螢幕線', 240), ('隨身碟', 120), ('筆電包', 140)]
輸入預算金額,找出所有「剛好兩件商品金額加起來等於預算」的組合。
請寫函數 find_pairs(items, budget),回傳組合串列;每個組合以 (前面的商品, 後面的商品) 表示,
依「後面那件商品在清單中的位置」排序,同一位置再依前面那件的位置排序。
要求:用字典記錄「已看過的金額 → 商品名稱串列」,只走訪清單一次,不使用雙層迴圈比對所有組合。
找不到時印出「沒有符合的組合」。
輸出格式(每個組合一行):
商品A + 商品B
作答登入後可作答

送件鴿飛出去了