Python-Kurs / while-Schleifen mit break und continue steuern
Eine while-Schleife wiederholt einen Block, solange ihre Bedingung wahr ist. break beendet die innerste Schleife; continue überspringt den Rest der aktuellen Runde. Prüfen Sie für jeden möglichen Ablauf, wie die nächste Eingabe oder der Zustand die Wiederholung verändern kann.
Wiederholungen nach Zustand steuern
Wenn die zu verarbeitenden Elemente bereits vorliegen, ist eine for-Schleife mit den vorhandenen Werten meist direkter. while eignet sich dagegen für eine Wiederholung, deren Ende von einem veränderlichen Zustand abhängt: etwa solange noch Eingaben angenommen werden sollen. Die Bedingung wird vor jedem Durchlauf geprüft; ist sie schon anfangs falsch, läuft der Block kein einziges Mal.
while True ist eine bewusst dauerhaft wahre Bedingung. Sie ist sinnvoll, wenn der Block einen klaren Ausstieg enthält. Ohne ein tatsächlich erreichbares break, einen Funktionsrücksprung oder eine andere Beendigung würde die Wiederholung weiterlaufen. Bei einer Zählvariable muss deren Änderung auch auf Pfaden erreichbar sein, die continue verwenden. Sonst kann dieselbe Bedingung unverändert wiederholt werden. Unterbrechen Sie eine ungewollt laufende Konsolenschleife mit Strg+C und prüfen Sie die Zustandsänderung.
Die Python-Sprachreferenz zu while beschreibt die erneute Prüfung der Bedingung sowie die Wirkung von break und continue.
Beträge bis zur Eingabe q sammeln
Speichern Sie den folgenden vollständigen Code als while_input.py in UTF-8 im Übungsordner. Zusatzpakete und Eingabedateien sind nicht erforderlich. Starten Sie python while_input.py mit Ihrem Projektinterpreter; ohne aktivierte Umgebung kann unter macOS oder Ubuntu python3 der passende Befehl sein. Geben Sie nacheinander 3500, eine leere Zeile, -1 und q ein und bestätigen Sie jede Eingabe mit Enter.
total = 0
while True:
text = input("amount or q: ").strip()
if text == "q":
break
if text == "":
continue
amount = int(text)
if amount < 0:
print("skip negative")
continue
total += amount
print("total:", total)
Die reine Programmausgabe ohne die vom Terminal angezeigten Tastatureingaben lautet:
amount or q: amount or q: amount or q: skip negative
amount or q: total: 3500
Die wiederholten Eingabeaufforderungen stehen hier teilweise in derselben Zeile, weil input die Aufforderung ohne abschließenden Zeilenumbruch ausgibt. Im interaktiven Terminal sehen Sie zusätzlich Ihre Eingaben und die durch Enter entstehenden Zeilenwechsel. Entscheidend sind die Meldung skip negative und der abschließende Wert total: 3500; Sie müssen die zusammengezogenen Aufforderungen nicht als Text eingeben.
Leere Eingaben, negative Zahlen und Fehler unterscheiden
strip() entfernt äußere Leerzeichen. Daher wird auch eine Zeile aus Leerzeichen als leer behandelt. Das erste if prüft die Beendigung vor der Zahlenumwandlung: q führt zu break, anschließend wird die Gesamtsumme außerhalb der Schleife ausgegeben. Eine leere Eingabe führt dagegen zu continue. Die nächste Runde ruft erneut input auf, sodass dieser Pfad nicht dieselbe leere Eingabe endlos weiterverarbeitet.
Andere Eingaben werden mit int(text) umgewandelt. Eine negative ganze Zahl löst die Meldung aus und wird nicht addiert; 0 ist eine gültige Zahl und verändert die Summe nicht. Erst eine akzeptierte nichtnegative Zahl erreicht total += amount. Die englischen Meldungen sind Teil des unveränderten Übungscodes.
Diese Version setzt ganze Zahlen oder q voraus. Bei abc, 3.5 oder Q entsteht ein ValueError; die normale Summenausgabe am Ende wird dann nicht erreicht. Bei beendetem Eingabestrom statt einer weiteren Zeile meldet input einen EOFError. Ein kleines q bleibt der ausdrücklich vorgesehene Ausstieg.
Für eine Wiederholung nach ungültigen Zahlen können Sie nur die Zeile amount = int(text) durch einen try-Block mit dieser Zuweisung ersetzen. Auf gleicher Einrückung wie try folgt except ValueError:; darin stehen eine verständliche Eingabemeldung und continue. Die beiden bisherigen Prüfungen auf q und leeren Text bleiben davor, die Negativprüfung und Addition danach. Fangen Sie nicht pauschal alle Ausnahmen ab, denn dadurch würden auch andere Fehler verdeckt. Die Einführung zur gezielten Ausnahmebehandlung erklärt diese Abgrenzung.
Ausstiegsbereich und Randfälle prüfen
break beendet nur die unmittelbar umgebende Schleife. In zwei verschachtelten Schleifen kann nach dem inneren break die äußere Schleife weiterlaufen. continue betrifft ebenfalls nur seine eigene Schleife. Wenn die gesamte Verarbeitung enden soll, benötigen Sie einen ausdrücklich weitergegebenen Zustand oder, innerhalb einer Funktion, einen passenden Rücksprung.
- Starten Sie neu und geben Sie sofort
qein. Die Summe muss 0 sein. - Geben Sie
10,20,0undqein. Prüfen Sie die Summe 30; die Null darf nicht als leere Eingabe behandelt werden. - Wiederholen Sie die ursprüngliche Folge mit Leerzeichen um
3500undq. Durchstrip()bleibt das Ergebnis 3500. - Starten Sie getrennt mit
abcund danach mitQ. Beide zeigen im unveränderten Code einen Umwandlungsfehler. Wenn ausschließlich der Beendigungsbefehl unabhängig von Groß- und Kleinschreibung sein soll, ändern Sie dessen Prüfung zutext.lower() == "q". Testen Sie beide Schreibweisen und stellen Sie anschließend die ursprüngliche Prüfung wieder her.
Eine Schleife mit Eingaben hat somit zwei getrennte Aufgaben: entscheiden, ob weitergearbeitet wird, und entscheiden, ob die aktuelle Eingabe verarbeitet werden darf. Halten Sie Beendigung, Überspringen und Zahlenverarbeitung in dieser Reihenfolge nachvollziehbar, damit jede neue Eingabe einen klaren Weg durch den Code hat.




