AI & Data Dreamers練功房
寶箱片場規則
PIPELINE GATES・資料工程關卡・高階・4 題

資料工程高階・容錯解析、驗證與型別推斷

這一頁是題幹試閱;登入/註冊後每題可以在瀏覽器裡執行、對答案,第一次交對 +10 XP。

  1. 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 等)。

    作答登入後可作答
  2. 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 等)。

    作答登入後可作答
  3. 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 等)。

    作答登入後可作答
  4. 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 已先把全部輸入讀進來,請保留這段,不要在迴圈裡邊讀邊印(回顯行會插進輸出中間,就對不上答案)。

    作答登入後可作答