學習軌道
/
Python
Python
/
練習
/
最大連續乘積
最大連續乘積

最大連續乘積

中等

簡介

你為一個政府機構工作,這個機構攔截到一群銀行搶匪之間一連串加密的通訊訊號。 這些訊號裡包含一長串數字。 你的團隊需要用各種數位訊號處理技術來分析這些訊號,找出任何可能顯示他們正在策劃搶案的模式。

說明

你的任務,是在加密訊號中那串長長的數字裡找出規律。

這裡你要用的技巧叫做「最大數列乘積」。

我們先來定義幾個名詞吧。

  • 輸入:你需要分析的一串數字
  • 數列:輸入中一段相鄰的數字(也就是彼此緊挨著的數字)
  • 跨度:每個數列有多長,也就是幾個數字
  • 乘積:把數字相乘之後得到的結果

我們用輸入"63915"來實際跑一個例子。

  • 要形成一個數列,就從原始輸入中取相鄰的數字。
  • 如果你處理的跨度是3,就會有三個可能的數列:
    • "639"
    • "391"
    • "915"
  • 接著我們要計算每個數列的乘積:
    • 數列"639"的乘積是 162(6 × 3 × 9 = 162)
    • 數列"391"的乘積是 27(3 × 9 × 1 = 27)
    • 數列"915"的乘積是 45(9 × 1 × 5 = 45)
  • 162 比 27 和 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")
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Python Exercism

準備好開始 最大連續乘積 了嗎?

註冊 Exercism,透過 17 個概念146 個練習 和真人引導來學習並精通 Python,全部免費。