Parse und werte einfache mathematische Textaufgaben aus und gib die Antwort als Ganzzahl zurück.
Aufgaben ohne Operationen ergeben einfach die angegebene Zahl.
What is 5?
Ergibt 5.
Addiere zwei Zahlen.
Behandle große Zahlen und negative Zahlen.
What is 5 plus 13?
Ergibt 18.
Führe jetzt die anderen drei Operationen aus.
What is 7 minus 5?
2
What is 6 multiplied by 4?
24
What is 25 divided by 5?
5
Behandle eine Reihe von Operationen nacheinander.
Da diese Textaufgaben in Worten formuliert sind, werte den Ausdruck von links nach rechts aus, ohne die übliche Reihenfolge der Operationen zu beachten.
What is 5 plus 13 plus 6?
24
What is 3 plus 2 multiplied by 3?
15 (d. h. nicht 9)
Der Parser sollte Folgendes ablehnen:
Manchmal ist es notwendig, eine Ausnahme auszulösen. Wenn du das tust, solltest du immer eine aussagekräftige Fehlermeldung angeben, um anzugeben, worin die Fehlerquelle liegt. Das macht deinen Code lesbarer und hilft beim Debugging erheblich. 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 von dir, dass du die raise-Anweisung verwendest, um einen ValueError zu „werfen", wenn die an answer() übergebene Frage fehlerhaft/ungültig ist oder eine unbekannte Operation enthält. Die Tests bestehen nur, wenn du die exception mit raise auslöst und eine Meldung dazu angibst.
Beachte: Die benötigte Meldung ist für jedes Szenario eine andere, obwohl derselbe Fehlertyp ausgelöst wird.
Schau dir die Tests genau an.
Um einen ValueError mit einer Meldung auszulösen, übergibst du die Meldung als Argument an den exception-Typ:
# if the question contains an unknown operation.
raise ValueError("unknown operation")
# if the question is malformed or invalid.
raise ValueError("syntax error")
Um einen ausgelösten Fehler innerhalb eines bestimmten Blocks zu behandeln, kannst du ein try-except verwenden.
try-except-Blöcke „umhüllen" den Code, der potenziell einen Fehler verursachen könnte, und bilden alle Ausnahmen auf einen Fehler, mehrere Fehler oder andere Codestücke ab, die das Problem behandeln:
while len(equation) > 1:
try:
# The questionable/error-prone code goes here,in an indented block
# It can contain statements, loops, if-else blocks, or other executable code.
x_value, operation, y_value, *rest = equation
...
...
except:
# Code for what to do when an error gets thrown in the code above.
# This could be one error, or more complicated logging, error checking and messaging.
raise ValueError("syntax error")
Melde dich bei Exercism an, um Python mit 17 Konzepte146 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.