根據尼各馬科斯(公元 60 年至 120 年)為正整數提出的分類法,判斷一個數字是 perfect、abundant 還是 deficient。
古希臘數學家尼各馬科斯為正整數設計了一套分類法,並依照每個數的真因數和,把它唯一歸入 perfect、abundant 或 deficient 其中一個類別。
「真因數和」的定義是:一個數字的所有因數(不包含這個數字本身)的總和。
例如,15 的真因數和是 1 + 3 + 5 = 9。
一個數字等於它的真因數和時,就是 perfect。 例如:
6 是 perfect 數,因為 1 + 2 + 3 = 6
28 是 perfect 數,因為 1 + 2 + 4 + 7 + 14 = 28
一個數字小於它的真因數和時,就是 abundant。 例如:
12 是 abundant 數,因為 1 + 2 + 3 + 4 + 6 = 16
24 是 abundant 數,因為 1 + 2 + 3 + 4 + 6 + 8 + 12 = 36
一個數字大於它的真因數和時,就是 deficient。 例如:
8 是 deficient 數,因為 1 + 2 + 4 = 7
實作出判斷給定數字是否為 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.")