CodeSprout程式萌芽
← 返回題庫 Python 基礎語法 / 第 486 題 操作教學 ↗
困難Class (類別)

486. 庫存分類卡

Class (類別)字典屬性方法狀態更新for

倉庫依序收到入庫、出庫或登記事件,請依本題的庫存規則處理並留下紀錄。

StockBook 複製 stock;accepted、rejected 初值均為 0,totals 初值為空清單。依 events 原順序處理 [name,amount],每筆都讀取當下數量,缺少品名視為 0。amount > 0 表示入庫 amount 件,amount < 0 表示出庫 -amount 件,amount = 0 是記錄或登記事件,不增減實際庫存。事件篩選條件為「每筆事件都進入庫存安全檢查」;候選數量一律是目前數量加上原 amount。庫存規則:候選數量須大於或等於 0。所有模式都禁止負庫存。只有事件篩選條件與庫存規則同時成立才接受,完整寫入候選數量並將 accepted 加 1。成功更新後即使數量為 0,也保留該品名。條件不成立時整筆拒絕:庫存數量及所有品名完全不變,不新增、不刪除品名,只將 rejected 加 1;不足出庫或超過倉儲上限都不能部分執行。無論接受或拒絕,每筆結束時都將全庫存數量總和加入 totals。最後回傳 [數量大於 0 的品名清單, 數量等於 0 的品名清單, accepted, rejected],兩份品名清單各自排序。

傳入的資料

stock:品名對初始數量的字典;events:依序執行的 [品名,帶正負號的數量變動] 清單。正數入庫、負數出庫、0 不改數量。

回傳的答案

由 report 回傳 [數量大於 0 的品名清單, 數量等於 0 的品名清單, accepted, rejected],兩份品名清單各自排序。拒絕事件仍計入 rejected 及該步總量紀錄。

範例 1
傳入[{}, []]
回傳[[], [], 0, 0]
範例 2
傳入[{}, [['a', 2], ['a', -1], ['b', 0]]]
回傳[['a'], ['b'], 3, 0]

初始數量 0~20,amount 為 -10~10 的整數;品名為 1~10 字的 ASCII 文字;最多 12 筆事件。缺少品名的當下數量視為 0。候選數量須大於或等於 0。拒絕不得改動任何庫存鍵值。

💡 給我一點提示+

先檢查完整候選數量;拒絕分支不能改動 stock,成功更新後才處理零值品名。

小提醒

以 solve(...) 作為測試入口,用 return 回傳答案。需要時可在上方加入 import、自訂函式與類別;不需要自己讀取輸入。

雲端草稿 PRO
跨裝置接續尚未提交的程式
</>你的程式碼
Python
本機草稿自動保存Tab 縮排・Esc 再 Tab 離開編輯器 ⌘ / Ctrl + Enter 測試

測試會執行 3 組公開案例與你新增的自訂案例。 登入後可提交程式,通過全部公開與隱藏測資後標記完成。

登入後提交

公開案例固定為 3 組。自訂案例只用於測試,不納入提交評分。0 / 17 組自訂案例

測試在瀏覽器內執行,不會標記完成或增加 XP。Python 首次載入需要網路。