// 題目

為每種器材建立逾期罰金計算函式

Build a Late-Fee Calculator for Each Gear Type・pync-15-01

  • Python 程式設計・15 Advanced Functions

時間限制 1 秒・記憶體 31 MB

到 Aki-Judge 送出

送出程式要先用 Discord 帳號登入 Aki-Judge,並加入註解 Annotated 的 Discord 伺服器(免費)。看題目不用登入。

題目敘述

社團辦公室出借器材,逾期要按天計算罰金,而且每種器材的算法不同:相機每天 50 元,腳架每天 10 元,投影機每天 100 元但最高罰到 800 元。負責結帳的程式不想為每增加一種器材就多寫一段 if,它想要的是「每種器材各有一個會算罰金的函式」,之後每筆歸還紀錄直接呼叫對應的函式即可。

make_fee(rate, cap) 就是產生這種函式的工廠。它本身不計算任何罰金,而是回傳一個計算罰金的函式,這個函式會記住建立時收到的 rate 與 cap。同一個工廠呼叫三次,就得到三個各自記住不同數字、互不影響的函式。規則有三條:罰金等於逾期天數乘以費率;days 為零或負數(準時甚至提早歸還)時罰金一律為 0,社團不會倒貼;計算結果超過 cap 時就取 cap,而 cap 為 0 表示該器材沒有上限。

請撰寫函式 make_fee(rate, cap),它回傳另一個函式;該函式接收逾期天數並回傳罰金。你只需要完成 make_fee,讀取器材表與歸還紀錄、呼叫你產生的函式以及輸出結果的部分都已經準備好了。

輸入格式

第一行:整數 c,社團出借的器材種類數。

接下來 c 行,每行 代號 rate cap,以單一空白分隔。

接著一行整數 n,表示歸還的器材件數;再來 n 行,每行 代號 days,days 可能為零或負數。

輸出格式

輸出 n 行,依歸還順序,每行為該件器材的罰金。

最後一行:total 後面接這些罰金的總和。

範例

範例 1

輸入

3
CAM 50 0
TRI 10 0
PRJ 100 800
4
CAM 3
TRI 0
PRJ 12
CAM -2

輸出

150
0
800
0
total 950

到 Aki-Judge 送出

送出程式要先用 Discord 帳號登入 Aki-Judge,並加入註解 Annotated 的 Discord 伺服器(免費)。看題目不用登入。

卡住了可以到 Discord 的 #程式問題 發問,小墨助教會先給提示,不會直接給答案。