你為一個政府機構工作,這個機構攔截到一群銀行搶匪之間一連串加密的通訊訊號。 這些訊號裡包含一長串數字。 你的團隊需要用各種數位訊號處理技術來分析這些訊號,找出任何可能顯示他們正在策劃搶案的模式。
你的任務,是在加密訊號中那串長長的數字裡找出規律。
這裡你要用的技巧叫做「最大數列乘積」。
我們先來定義幾個名詞吧。
我們用輸入"63915"來實際跑一個例子。
3,就會有三個可能的數列:
"639""391""915""639"的乘積是 162(6 × 3 × 9 = 162)"391"的乘積是 27(3 × 9 × 1 = 27)"915"的乘積是 45(9 × 1 × 5 = 45)"63915"的最大數列乘積來自數列"639"。
因此答案是 162。有時我們會需要引發例外。這麼做的時候,最好一律附上有意義的錯誤訊息,指出錯誤的來源。這能讓程式碼更好讀,對除錯也有很大的幫助。如果你已經知道錯誤來源屬於某個特定型別,可以選擇引發其中一種內建錯誤型別,但還是要附上有意義的訊息。
這個練習要求你使用 raise 敘述,在 largest_product()函式收到無效輸入時「拋出」ValueError。你必須同時raise這個exception並附上訊息,測試才會通過。歡迎直接沿用你在series練習中寫的程式碼!
若要引發帶有訊息的 ValueError,請把訊息寫成 exception 型別的引數:
# span of numbers is longer than number series
raise ValueError("span must not exceed string length")
# span of number is negative
raise ValueError("span must not be negative")
# series includes non-number input
raise ValueError("digits input must only contain digits")