資料工程高階・容錯解析、驗證與型別推斷
這一頁是題幹試閱;登入/註冊後每題可以在瀏覽器裡執行、對答案,第一次交對 +10 XP。
- 01
七步驟驗證判定
中等第 13 章的端到端驗證有固定順序。程式讀入 7 行,每行
<步驟名> <ok|fail>,步驟依序為compose、web、logs、producer、worker、db、flower。請找出第一個 fail 的步驟並印出第 <序號> 步失敗:<步驟名> —— <排查建議>,之後的步驟不再判定;全部 ok 則印七步全過。排查建議對照表:| 步驟 | 建議 |
|---|---|
| compose | docker compose ps -a |
| web | curl 各 port |
| logs | 區分啟動期 Connection refused 與真正 error |
| producer | 看 exit code |
| worker | 看 worker log 是否 succeeded |
| db | SHOW TABLES 與 SELECT COUNT(*) |
| flower | 看 task 狀態是否 SUCCESS |
注意:即使第一個 fail 之後仍有輸入,程式還是要把 7 行讀完(input() 次數固定)。
本題在瀏覽器內以 Pyodide 執行,只能用 Python 標準函式庫(json、csv、collections、itertools、datetime、re、math、heapq 等)。
作答登入後可作答 - 02
容錯的價格解析
中等寫一個函式
parse_price(text),把爬回來的價格文字轉成 float:- 先去掉前後空白、千分位逗號與結尾的「元」
- 空字串、
--、n/a(不分大小寫)回傳None - 其餘轉成 float;轉不成也回傳
None
變數
texts是測試清單,請逐筆印出<repr(原文)> -> <結果>,結果用repr()(例如'180' -> 180.0、'--' -> None)。這類函式正是補充 F 單元測試的典型對象:每個邊界各寫一個 assert。本題在瀏覽器內以 Pyodide 執行,只能用 Python 標準函式庫(json、csv、collections、itertools、datetime、re、math、heapq 等)。
作答登入後可作答 - 03
移動平均與漲跌幅
困難變數
closes是某支股票連續 10 個交易日的收盤價。請在不使用 pandas 的情況下,對第 i 天(從 1 起算)印出一行:第 i 天 close=<收盤> 漲跌=<與前一天差額,第 1 天印 -> MA5=<近 5 天平均,不足 5 天印 ->漲跌與 MA5 都保留兩位小數,正數不加
+號。這和 SQL 的LAG與AVG() OVER (ROWS BETWEEN 4 PRECEDING AND CURRENT ROW)算的是同一件事。本題在瀏覽器內以 Pyodide 執行,只能用 Python 標準函式庫(json、csv、collections、itertools、datetime、re、math、heapq 等)。
作答登入後可作答 - 04
JSON 欄位型別推斷
困難schema 推斷API 回傳的 JSON 紀錄欄位不固定、型別也可能不一致。寫入倉儲前要推斷每個欄位的型別。規則:
- 單筆值的型別:null、bool、int、float、str(注意 JSON 的 true/false 是 bool,不算 int;陣列或物件一律視為 str)。
- 欄位型別依所有「非 null」值合併:全部相同就是該型別;只有 int 與 float 混合時是 float;其他混合一律 str。
- 欄位只有 null 值時,型別為 null。
- nullable:只要有任何一筆該欄為 null 或「缺少該欄」,就是 nullable,否則 required。
輸入:
第 1 行:n
接下來 n 行:每行一筆 JSON 物件
輸出:依欄位「第一次出現的順序」,每欄一行「欄名 型別 nullable/required」。
範例輸入:
2
{"a": 1, "b": null}
{"a": 2.5, "c": true}
範例輸出:
a float required
b null nullable
c bool nullable
輸入請用 input() 逐行讀取(平台不支援 sys.stdin)。執行時平台會把每一行測資回顯在輸出最前面,這是正常的,不用自己印。starter 已先把全部輸入讀進來,請保留這段,不要在迴圈裡邊讀邊印(回顯行會插進輸出中間,就對不上答案)。
作答登入後可作答

送件鴿飛出去了