你打算在住家附近的樹林裡蓋一座樹屋,這樣就能欣賞日出和日落。
你從當地一家測量公司取得了資料,裡頭記錄了地圖上每個長方形區域中每棵樹的高度。 你需要分析地圖上的每個網格,找出適合蓋樹屋的好樹。
一棵好樹必須同時符合兩個條件:
你的任務是找出所有可能的地點,看看哪些樹適合讓你蓋樹屋。
資料公司提供的資料是一張張網格,網格中顯示了每棵樹的高度。 網格中橫向的列代表東西向,縱向的行代表南北向。
合格的樹會是它那一列中最大的,同時是它那一行中最小的。
一張網格可能完全沒有合格的樹。 也可能只有一棵,甚至好幾棵。
這裡有一張網格,裡面剛好只有一棵候選的樹。
↓
1 2 3 4
|-----------
1 | 9 8 7 8
→ 2 |[5] 3 2 4
3 | 6 6 7 1
所以[2, 1]這個位置(第 2 列、第 1 行)很適合蓋樹屋。
有時候,你需要引發例外。這麼做時,一定要附上有意義的錯誤訊息,指出錯誤的來源。這會讓你的程式碼更容易閱讀,也對除錯大有幫助。如果你已經知道錯誤來源屬於某種特定型態,可以選擇引發其中一種內建錯誤型態,但仍然要附上有意義的訊息。
這個練習要求你使用 raise 敘述,在matrix不規則時「拋出」ValueError。只有在你同時raise這個exception並附上訊息時,測試才會通過。
若要引發帶有訊息的ValueError,請把訊息當作引數傳給exception型別:
# if the matrix is irregular
raise ValueError("irregular matrix")