0%

Arbeit mit Schleifen wiederholen · Übung

Frage weiter, bis die Antwort sinnvoll ist

Manchmal soll eine Schleife nicht enden, sondern nur einen unbrauchbaren Wert überspringen und den nächsten versuchen. Das ist die Aufgabe von continue.

Wenn Python continue erreicht, verwirft es den Rest des aktuellen Durchlaufs und kehrt zum Anfang der Schleife zurück.

Überspringe einen Wert, nicht die ganze Schleife

Beginne mit einer for-Schleife, bei der der nächste Durchlauf leicht zu erkennen ist:

Try it

Der leere String wird übersprungen. Die Schleife endet nicht, sondern geht zu "no" weiter. Diesen Unterschied solltest du auseinanderhalten:

  • break beendet die Schleife.

  • continue überspringt den verbleibenden Rumpf. Eine for-Schleife fragt dann nach dem nächsten Element; eine while-Schleife prüft ihre Bedingung erneut.

Bei einem kurzen Rumpf kann ein einfaches if verständlicher sein:

answers = ["yes", "", "no"]

for answer in answers:
    if answer != "":
        print(f"Recorded: {answer}")

Verwende continue, wenn frühes Überspringen die eigentliche Arbeit übersichtlich hält. Verwende es nicht bloß, weil das Schlüsselwort existiert und wichtig aussieht. Python hat schon genug Drama.

Frage nach einer unbrauchbaren Antwort erneut

Bei Eingaben bekommt continue eine praktische Aufgabe. Du kannst nicht wissen, wie viele Versuche eine Person braucht. Verwende deshalb while True. Weise eine unbrauchbare Antwort mit continue zurück und verlasse die Schleife mit dem bekannten break, sobald die Antwort passt:

options = ["yes", "no"]

while True:
    answer = input("Please answer yes or no: ").strip().lower()

    if answer not in options:
        print(f"Sorry, {answer} is not an option. Try again.")
        continue

    break

print(f"Thank you. You answered {answer}.")

Beachte die Reihenfolge. Die Frage aktualisiert answer, bevor continue laufen kann. Eine ungeeignete Antwort führt zu einem Hinweis und springt zur Frage zurück. Eine geeignete Antwort passiert das if, erreicht break und verlässt die Schleife.

Die Bereinigung erfolgt beim Eintreffen der Antwort. Wer YES tippt, meint trotzdem yes. Die Person mit einem Leerzeichen kämpfen zu lassen ist keine besonders hilfreiche Lektion.

Sorge vor continue für Fortschritt

In einer while-Schleife bewegt Python nichts für dich weiter. Springt ein continue über die einzige Aktualisierung, kann die Schleife stecken bleiben:

count = 0

while count < 3:
    if count == 1:
        continue
    count += 1

Wenn count zu 1 wird, überspringt continue die Aktualisierung. Der nächste Durchlauf sieht denselben Wert und überspringt sie immer wieder.

Die Eingabeschleife vermeidet diese Falle, weil input() vor der Entscheidung zum Fortsetzen eine neue Antwort zuweist. Prüfe bei continue in jeder while-Schleife, ob die für den Fortschritt verantwortliche Variable zuerst geändert wird.

Was gibt dieser Code aus?

for value in [2, 0, 4]:
    if value == 0:
        continue
    print(value)

Was bewirkt .strip().lower() für die Validierungsschleife?

Baue jetzt selbst denselben freundlichen Weg zum erneuten Fragen.

Aufgabe

Schreibe ein Programm, das so lange nach einer Tagesvorliebe fragt, bis es eine brauchbare Antwort erhält, und meldet, wie oft es fragen musste.

Vervollständige das Programm mit einer while True-Schleife, sodass:

  • jede Frage die Eingabeaufforderung Weekday or weekend? verwendet und die Antwort mit .strip().lower() bereinigt;

  • attempts jede gegebene Antwort mitzählt, auch unbrauchbare;

  • eine Antwort, die nicht in days steht, zu continue führt und erneut fragt;

  • eine brauchbare Antwort zu break führt;

  • die beiden Berichtszeilen einmal nach der Schleife laufen.

Erwartete Schlusszeilen:

You chose: weekend
Attempts: 3

Gib beim eigenen Ausführen zuerst ein oder zwei falsche Antworten ein und beobachte, wie das Programm erneut fragt. Submit führt dein Programm mit eigenen vorbereiteten Antworten aus. Die genauen Anzahlen oben stammen deshalb aus diesen Antworten, nicht aus deinen Eingaben.