踩地雷是一款熱門遊戲,玩家必須運用數字提示找出地雷,這些提示會指出與某個方格直接相鄰(水平、垂直、對角)的地雷數量。
你的任務是在一個已經完成的踩地雷棋盤上,為空格標上周圍的地雷數量。
棋盤本身是一個長方形,由許多格子組成,每個格子不是空格(' ')就是地雷('*')。
對每個空格來說,計算與它相鄰的地雷數量(水平、垂直、對角都算)。 如果這個空格旁邊沒有地雷,就讓它保持空白。 否則就把它換成相鄰的地雷數量。
舉例來說,你可能會收到像這樣的 5 x 4 棋盤(為了在畫面上顯示,這裡的空格用「·」字元表示):
·*·*·
··*··
··*··
·····
而你的程式碼應該把它轉換成這樣:
1*3*1
13*31
·2*2·
·111·
有時我們需要引發例外。當你這麼做時,應該一律附上有意義的錯誤訊息,指出錯誤的來源。這能讓程式碼更好讀,對除錯也有很大的幫助。如果你知道錯誤來源會是某種類型,可以選擇引發其中一種內建錯誤類型,但還是應該附上有意義的訊息。
這道練習要求你在 board() 函式收到格式錯誤的輸入時,使用 raise 敘述來「拋出」ValueError。只有同時 raise 這個 exception 並附上訊息,測試才會通過。
若要引發帶有訊息的 ValueError,請把訊息寫成 exception 型別的引數:
# when the board receives malformed input
raise ValueError("The board is invalid with current input.")