Du wurdest gerade als Professor für Mathematik eingestellt. Deine erste Woche lief gut, aber in deiner zweiten Woche stimmt etwas nicht. Das Problem ist, dass jede Antwort deiner Studierenden falsch ist! Zum Glück hast du mit deinen Mathekenntnissen das Problem schnell gefunden: Die Antworten der Studierenden sind richtig, aber sie stehen alle im Zweiersystem (Binärsystem)! Erstaunlicherweise verwendet jede Woche eine andere Basis. Damit du die Antworten deiner Studierenden schnell überprüfen kannst, baust du ein Tool, das Zahlen zwischen verschiedenen Basen umrechnet.
Wandle eine Ziffernfolge in einer Basis, die eine Zahl darstellt, in eine Ziffernfolge in einer anderen Basis um, die dieselbe Zahl darstellt.
Versuche, die Umwandlung selbst zu implementieren. Verwende nichts anderes, um die Umwandlung für dich durchzuführen.
In der Positionsnotation lässt sich eine Zahl zur Basis b als Linearkombination von Potenzen von b verstehen.
Die Zahl 42, zur Basis 10, bedeutet:
(4 × 10¹) + (2 × 10⁰)
Die Zahl 101010, zur Basis 2, bedeutet:
(1 × 2⁵) + (0 × 2⁴) + (1 × 2³) + (0 × 2²) + (1 × 2¹) + (0 × 2⁰)
Die Zahl 1120, zur Basis 3, bedeutet:
(1 × 3³) + (1 × 3²) + (2 × 3¹) + (0 × 3⁰)
Ja. Diese drei Zahlen oben sind genau dieselben. Herzlichen Glückwunsch!
Manchmal ist es notwendig, eine Ausnahme auszulösen. Dabei solltest du immer eine aussagekräftige Fehlermeldung angeben, die zeigt, woher der Fehler stammt. Das macht deinen Code lesbarer und hilft beim Debuggen deutlich. Wenn du weißt, dass die Fehlerquelle von einem bestimmten Typ ist, kannst du eine der eingebauten Fehlertypen auslösen, solltest aber trotzdem eine aussagekräftige Meldung angeben.
Diese Übung verlangt, dass du die raise-Anweisung verwendest, um für unterschiedliche Eingabe- und Ausgabebasen einen ValueError zu „werfen“. Die Tests bestehen nur, wenn du die exception mit raise auslöst und dazu eine aussagekräftige Meldung angibst.
Um einen ValueError mit einer Meldung auszulösen, übergibst du die Meldung als Argument an den exception-Typ:
# for input.
raise ValueError("input base must be >= 2")
# another example for input.
raise ValueError("all digits must satisfy 0 <= d < input base")
# or, for output.
raise ValueError("output base must be >= 2")
Melde dich bei Exercism an, um Python mit 17 Konzepte146 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.