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:
Der leere String wird übersprungen. Die Schleife endet nicht, sondern geht zu "no" weiter. Diesen Unterschied solltest du auseinanderhalten:
breakbeendet die Schleife.continueüberspringt den verbleibenden Rumpf. Einefor-Schleife fragt dann nach dem nächsten Element; einewhile-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;attemptsjede gegebene Antwort mitzählt, auch unbrauchbare;eine Antwort, die nicht in
dayssteht, zucontinueführt und erneut fragt;eine brauchbare Antwort zu
breakfü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.