0%

Fehler, Validierung und Fehlersuche · Übung

Validiere vor dem Umwandeln

Bevor int() Text umwandelt, kann ein Programm die erwartete Form prüfen. Diese Lektion akzeptiert gewöhnliche Tastaturziffern von 0 bis 9. Die Stringmethode .isdigit() ist eine einfache erste Prüfung für diese bewusst eng gefasste Anforderung.

Betrachte eine Eingabeaufforderung für eine Sitzplatznummer:

while True:
    answer = input("Seat number: ")

    if answer.isdigit():
        seat = int(answer)
        break

    print("Please enter digits only.")

print(f"Seat: {seat}")

Die Reihenfolge ist wichtig:

  1. input() liefert einen String.

  2. .isdigit() validiert diesen String.

  3. int() wird erst nach erfolgreicher Validierung ausgeführt.

  4. break verlässt die Schleife mit einer gültigen ganzen Zahl.

Wenn die Antwort ungültig ist, wird die Umwandlung übersprungen. Die Meldung wird ausgegeben, und der nächste Schleifendurchlauf fragt erneut.

Verfolge zwei Versuche

Wenn die Antworten zuerst front und dann 12 lauten, sieht der Ablauf so aus:

Versuchanswer.isdigit()Aktion
"front"FalseHinweis ausgeben und wiederholen
"12"Truein 12 umwandeln und die Schleife verlassen

Das Programm übergibt "front" nie an int(). Deshalb kann diese Eingabe keinen ValueError auslösen.

Validiere die Regel, die du tatsächlich brauchst

Für die hier verwendeten gewöhnlichen Ziffern von 0 bis 9 akzeptiert .isdigit() Beispiele wie "0" und "27". Es lehnt Folgendes ab:

  • negative Zahlen wie "-2";

  • Dezimalzahlen wie "3.5";

  • Vorzeichen wie in "+4";

  • Wörter wie "many".

Ein leerer String besteht diese Prüfung ebenfalls nicht. Auch umgebende Leerzeichen führen zur Ablehnung, weil dieses Beispiel die Antwort nicht bereinigt.

Diese Übung verwendet gewöhnliche Tastaturzeichen. Einige andere Ziffernzeichen wie "²" bestehen die Prüfung mit .isdigit(), führen bei int() aber trotzdem zu einem ValueError. Daher ist .isdigit() hier eine nützliche erste Prüfung, jedoch keine Garantie, dass jeder mögliche String umgewandelt werden kann.

Das ist hilfreich, wenn die Anforderung innerhalb dieser begrenzten Eingabemenge wirklich nur Ziffern lautet. Es ist keine vollständige Prüfung für jeden Wert, den int() versteht. Die nächsten Lektionen führen try und except ein. Damit lässt sich Python selbst fragen, ob eine Umwandlung in eine ganze Zahl funktioniert.

Gib hilfreiche Hinweise für den nächsten Versuch

Eine Fehlermeldung sollte Lernenden oder Nutzern helfen, beim nächsten Versuch eine gültige Eingabe zu machen. „Invalid“ ist vage. „Please enter digits only.“ nennt das erwartete Format: Es dürfen nur Ziffern eingegeben werden.

Lass die Eingabeaufforderung innerhalb der Schleife. Andernfalls könnte das Programm seine Prüfung endlos wiederholen, ohne eine neue Antwort einzulesen.

Der Nutzer gibt zuerst many und dann 3 ein. Wie oft ruft dieses Programm int() auf?

while True:
    text = input("Count: ")
    if text.isdigit():
        count = int(text)
        break
    print("Digits only.")

Aufgabe

Erstelle eine Eingabeaufforderung für eine Ticketanzahl, die bei ungültigen Antworten erneut fragt. In dieser Übung verwenden die Antworten gewöhnliche Tastaturzeichen. Gültige Antworten enthalten nur 0 bis 9. Prüfe jede Antwort vor der Umwandlung mit .isdigit().

Verwende bei jedem Versuch diese Eingabeaufforderung:

Number of tickets: 

Wenn die Antwort etwas anderes als Ziffern enthält, gib Folgendes aus:

Please enter digits only.

Frage dann erneut. Sobald die Antwort ausschließlich aus Ziffern besteht, wandle sie in eine ganze Zahl um, verlasse die Schleife und gib Folgendes aus:

Tickets: 7

Die vorbereiteten Testdaten geben zuerst many, dann -2 und zuletzt 7 ein. Dein Programm muss die ersten beiden Antworten ablehnen, ohne zu versuchen, sie umzuwandeln.