Eine Schleife, die eine Bedingung beobachtet
Während for über eine bekannte Sequenz iteriert, schleift while weiter, solange eine Bedingung wahr ist. Du greifst zu ihr, wenn du vorher nicht weißt, wie viele Iterationen es werden — erneut versuchen, bis etwas funktioniert, Eingaben lesen, bis der Nutzer stopp sagt, einen Dienst pollen, bis er antwortet.
Die Form ist schlicht:
Das gibt 0 bis 4 aus. Python prüft die Bedingung am Beginn jeder Iteration. Ist sie wahr, läuft der Rumpf. Dann prüft es erneut. Wird die Bedingung falsch, endet die Schleife.
Beachte: count += 1 ist wichtig. Ohne es bliebe die Bedingung für immer wahr — eine Endlosschleife. Das ist die Hauptfalle von while und der Hauptgrund, for zu bevorzugen, wann immer du kannst.
Wann while das richtige Werkzeug ist
Ein paar klassische Anwendungsfälle:
Erneut versuchen, bis Erfolg.
Eingaben lesen, bis der Nutzer beendet.
Eine Warteschlange abarbeiten.
Der rote Faden: Du beobachtest eine Zustandsänderung, anstatt über Elemente zu iterieren.
while True ist in Ordnung
Dieses Muster siehst du oft:
Das ist idiomatisches Python, wenn die „eigentliche“ Ausstiegsbedingung im Schleifenrumpf liegt und nicht sauber am Anfang prüfbar ist. Es liest sich einfacher, als einen should_continue-Flag zu erfinden, den du an einer Stelle aktualisierst und an einer anderen prüfst.
Die einzige Regel: stell sicher, dass es ein break (oder return oder eine geworfene Ausnahme) gibt, das der Code irgendwann erreicht. Ein bedingungsloses while True: ohne Ausweg ist der Klassiker, um ein Programm einzufrieren.
Die Endlosschleife vermeiden
Endlosschleifen entstehen, wenn die Bedingung für immer wahr bleibt. Die üblichen Verdächtigen:
- Variable nicht aktualisiert.
while count < 5:braucht etwas im Rumpf, dascountändert. - Falsche Variable aktualisiert.
while i < 10:und dannj += 1im Rumpf — leicht zu übersehen, wenn dein Code mehr als ein paar Variablen hat. - Fließkomma-Vergleich.
while x != 1.0:kann ewig laufen, wennxnur nahe an 1.0 herankommt. Nimm stattdessen<=oderabs(x - 1.0) < tolerance.
Sitzt du in einer Endlosschleife im Terminal fest, drück Strg+C. Das sendet ein Interrupt-Signal, und Python bricht ab, was es gerade tut.
break, continue und else
while unterstützt dieselben drei Flusswerkzeuge wie for:
breakverlässt die Schleife sofort.continuespringt zur nächsten Iteration (die Bedingung wird erneut geprüft).elseläuft, wenn die Schleife ohnebreakbeendet wurde.
Das ist eine primitive Primzahlprüfung. Feuert das innere break, ist die Zahl zusammengesetzt. Endet die Schleife natürlich (Bedingung wird falsch), läuft das else und erklärt die Zahl zur Primzahl.
while vs. for: wann was?
Ein schneller mentaler Test:
- Hast du eine Sammlung zum Durchgehen? →
for. - Musst du eine feste Anzahl von Malen iterieren? →
for i in range(n):. - Schleifst du, bis sich eine Bedingung ändert? →
while.
In frühem Python-Code wirst du feststellen, dass for 90 % der Schleifen abdeckt. while taucht auf, wenn du etwas wie Polling, Wiederholungen oder einen einfachen REPL baust. Nutzt du while, um eine Liste mit einem Index zu iterieren, ist das ein Zeichen, auf for + enumerate umzusteigen.
Ein praktisches while-Programm
Ein Zahlenratspiel ist ein Klassiker, weil die Zahl der Iterationen davon abhängt, wie der Nutzer spielt:
Du kannst vorher nicht wissen, wie viele Versuche es werden — das hängt von den Tipps des Nutzers ab. Genau dafür existiert while.
Ausblick
Du hast jetzt die zwei Schleifentypen gesehen, die Python dir bietet. Als Nächstes: range() im Detail — er taucht in fast jeder zählenden for-Schleife auf, und die kleinen Feinheiten sind es wert zu verstehen, bevor wir in die Sammlungen gehen.
Häufig gestellte Fragen
Wann soll ich eine while-Schleife statt einer for-Schleife nutzen?
Nimm while, wenn du vorher nicht weißt, wie viele Iterationen du brauchst — zum Beispiel so lange erneut versuchen, bis etwas klappt, oder Eingaben lesen, bis der Nutzer „quit“ tippt. Nimm for, wenn du eine bekannte Sammlung durchgehst.
Wie vermeide ich eine Endlosschleife in Python?
Sorg dafür, dass in der Schleife etwas die Bedingung irgendwann falsch werden lässt. Der häufigste Grund für Endlosschleifen ist, die Variable, von der die Bedingung abhängt, nicht zu aktualisieren. Wenn du in eine gerätst, drück Strg+C im Terminal, um sie zu stoppen.
Ist while True schlechte Praxis?
while True schlechte Praxis?Nicht grundsätzlich. while True: mit einem klaren break darin ist ein völlig normales Muster für „schleife, bis wir eine bestimmte Ausstiegsbedingung erreichen“. Es ist sauberer, als einen booleschen Flag zu erfinden, den du an zwei Stellen verwalten musst.