完全數

完全數

簡單

說明

根據尼各馬科斯(公元 60 年至 120 年)為正整數提出的分類法,判斷一個數字是 perfect、abundant 還是 deficient。

古希臘數學家尼各馬科斯為正整數設計了一套分類法,並依照每個數的真因數和,把它唯一歸入 perfect、abundant 或 deficient 其中一個類別。 「真因數和」的定義是:一個數字的所有因數(不包含這個數字本身)的總和。 例如,15 的真因數和是 1 + 3 + 5 = 9。

Perfect

一個數字等於它的真因數和時,就是 perfect。 例如:

  • 6 是 perfect 數,因為 1 + 2 + 3 = 6
  • 28 是 perfect 數,因為 1 + 2 + 4 + 7 + 14 = 28

Abundant

一個數字小於它的真因數和時,就是 abundant。 例如:

  • 12 是 abundant 數,因為 1 + 2 + 3 + 4 + 6 = 16
  • 24 是 abundant 數,因為 1 + 2 + 3 + 4 + 6 + 8 + 12 = 36

Deficient

一個數字大於它的真因數和時,就是 deficient。 例如:

  • 8 是 deficient 數,因為 1 + 2 + 4 = 7
  • 質數都是 deficient

任務

實作出判斷給定數字是否為 perfect 的方法。 依你的語言軌道而定,你可能還需要實作出判斷給定數字是否為 abundant 或 deficient 的方法。

例外訊息

有時候,我們必須拋出例外。這麼做的時候,一定要附上有意義的錯誤訊息,說明錯誤的來源是什麼。這能讓你的程式碼更容易閱讀,也對除錯有很大的幫助。如果你知道錯誤來源會是某個特定的型別,可以選擇拋出其中一種內建錯誤型別,但仍然要附上有意義的訊息。

這個練習要求你使用 raise 敘述,在classify()函式收到不是_正整數_的數字時「拋出」ValueError。唯有同時raise這個exception並附上訊息,測試才會通過。

若要拋出帶有訊息的ValueError,請把訊息寫成exception型別的引數:

# if a number to be classified is less than 1.
raise ValueError("Classification is only possible for positive integers.")
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Python Exercism

準備好開始 完全數 了嗎?

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