Determina se un numero è perfetto, abbondante o difettoso in base allo schema di classificazione dei numeri interi positivi di Nicomaco (60 - 120 d.C.).
Il matematico greco Nicomaco ideò uno schema di classificazione dei numeri interi positivi, che assegna ciascuno di essi in modo univoco a una delle categorie perfetto, abbondante o difettoso, in base alla loro somma dei divisori propri.
La somma dei divisori propri è definita come la somma dei fattori di un numero, escluso il numero stesso.
Per esempio, la somma dei divisori propri di 15 è 1 + 3 + 5 = 9.
Un numero è perfetto quando è uguale alla somma dei suoi divisori propri. Per esempio:
6 è un numero perfetto perché 1 + 2 + 3 = 6
28 è un numero perfetto perché 1 + 2 + 4 + 7 + 14 = 28
Un numero è abbondante quando è minore della somma dei suoi divisori propri. Per esempio:
12 è un numero abbondante perché 1 + 2 + 3 + 4 + 6 = 16
24 è un numero abbondante perché 1 + 2 + 3 + 4 + 6 + 8 + 12 = 36
Un numero è difettoso quando è maggiore della somma dei suoi divisori propri. Per esempio:
8 è un numero difettoso perché 1 + 2 + 4 = 7
Implementa un modo per determinare se un numero dato è perfetto. A seconda del track linguistico che segui, potresti anche dover implementare un modo per determinare se un numero dato è abbondante o difettoso.
A volte è necessario sollevare un'eccezione. Quando lo fai, dovresti sempre includere un messaggio di errore significativo per indicare qual è l'origine dell'errore. Questo rende il codice più leggibile e aiuta notevolmente durante il debug. Nei casi in cui sai che l'origine dell'errore sarà di un certo tipo, puoi scegliere di sollevare uno dei tipi di errore integrati, ma dovresti comunque includere un messaggio significativo.
Questo particolare esercizio richiede di usare l'istruzione raise per «lanciare» un ValueError se alla funzione classify() viene passato un numero che non è un intero positivo. I test passeranno solo se fai il raise dell'exception e ci includi anche un messaggio.
Per sollevare un ValueError con un messaggio, scrivi il messaggio come argomento del tipo exception:
# if a number to be classified is less than 1.
raise ValueError("Classification is only possible for positive integers.")
Iscriviti a Exercism per imparare e padroneggiare Python con 17 concetti146 esercizi e il mentoring di persone reali, tutto gratis.