Bestimme anhand des Klassifikationsschemas von Nicomachus (60 - 120 n. Chr.) für positive Ganzzahlen, ob eine Zahl perfect, abundant oder deficient ist.
Der griechische Mathematiker Nicomachus entwickelte ein Klassifikationsschema für positive Ganzzahlen. Es ordnet jede Zahl anhand ihrer Aliquotsumme eindeutig einer der Kategorien perfect, abundant oder deficient zu.
Die Aliquotsumme ist definiert als die Summe der Teiler einer Zahl, wobei die Zahl selbst nicht mitgezählt wird.
Zum Beispiel ist die Aliquotsumme von 15 gleich 1 + 3 + 5 = 9.
Eine Zahl ist perfect, wenn sie gleich ihrer Aliquotsumme ist. Zum Beispiel:
6 ist perfect, weil 1 + 2 + 3 = 6
28 ist perfect, weil 1 + 2 + 4 + 7 + 14 = 28
Eine Zahl ist abundant, wenn sie kleiner als ihre Aliquotsumme ist. Zum Beispiel:
12 ist abundant, weil 1 + 2 + 3 + 4 + 6 = 16
24 ist abundant, weil 1 + 2 + 3 + 4 + 6 + 8 + 12 = 36
Eine Zahl ist deficient, wenn sie größer als ihre Aliquotsumme ist. Zum Beispiel:
8 ist deficient, weil 1 + 2 + 4 = 7
Implementiere eine Möglichkeit, festzustellen, ob eine gegebene Zahl perfect ist. Je nach deinem Sprach-Track musst du vielleicht auch eine Möglichkeit implementieren, festzustellen, ob eine gegebene Zahl abundant oder deficient ist.
Manchmal ist es notwendig, eine Exception auszulösen. Wenn du das tust, solltest du immer eine aussagekräftige Fehlermeldung angeben, die zeigt, woher der Fehler kommt. Das macht deinen Code lesbarer und hilft beim Debugging erheblich. Wenn du weißt, dass die Fehlerquelle von einem bestimmten Typ ist, kannst du einen der eingebauten Fehlertypen auslösen, solltest aber trotzdem eine aussagekräftige Meldung angeben.
Diese Übung verlangt, dass du die raise-Anweisung verwendest, um eine ValueError-Exception zu „werfen“, wenn du der Funktion classify() eine Zahl übergibst, die keine positive Ganzzahl ist. Die Tests bestehen nur, wenn du die exception sowohl mit raise auslöst als auch eine Meldung dazu angibst.
Um einen ValueError mit einer Meldung auszulösen, schreibe die Meldung als Argument an den exception-Typ:
# if a number to be classified is less than 1.
raise ValueError("Classification is only possible for positive integers.")
Melde dich bei Exercism an, um Python mit 17 Konzepte146 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.