W3docs

Python While-Schleifen: Ein umfassender Leitfaden

Python while-Schleifen meistern: Syntax, break, continue, else-Klausel, verschachtelte Schleifen, Endlosschleifen und praktische Beispiele.

Eine while-Schleife führt einen Codeblock wiederholt aus, solange eine Bedingung True ist. Im Gegensatz zu einer for-Schleife, die über eine bekannte Sequenz von Elementen iteriert, ist eine while-Schleife die richtige Wahl, wenn man im Voraus nicht weiß, wie viele Iterationen benötigt werden — beispielsweise beim Lesen von Benutzereingaben, beim Leeren einer Warteschlange oder beim Wiederholen einer Operation, bis sie erfolgreich ist.

Dieses Kapitel behandelt:

  • Grundlegende Syntax und wie die Bedingung ausgewertet wird
  • break — die Schleife vorzeitig beenden
  • continue — zur nächsten Iteration springen
  • Die else-Klausel — Code, der ausgeführt wird, wenn die Schleife normal endet
  • Verschachtelte while-Schleifen
  • Der pass-Platzhalter
  • Endlosschleifen und wie man sie vermeidet
  • Wann while statt for verwendet werden sollte

Grundlegende Syntax

while condition:
    # block executed while condition is True

Python wertet condition vor jeder Iteration aus. Ist sie True, wird der eingerückte Block ausgeführt. Wenn der Block abgeschlossen ist, wird die Bedingung erneut geprüft. Die Schleife endet, sobald die Bedingung zu False ausgewertet wird.

Von 1 bis 5 zählen

python— editable, runs on the server

Ausgabe:

1
2
3
4
5

Hier beginnt i bei 1. Nach jedem print erhöht sich i um 1. Wenn i den Wert 6 erreicht, wird die Bedingung i <= 5 zu False und die Schleife stoppt.

Die Zählervariable muss innerhalb der Schleife aktualisiert werden. Wird i += 1 (oder eine entsprechende Aktualisierung) vergessen, wird die Bedingung niemals False und es entsteht eine Endlosschleife.

Countdown-Beispiel

count = 5
while count > 0:
    print(count)
    count -= 1
print("Liftoff!")

Ausgabe:

5
4
3
2
1
Liftoff!

Code nach dem while-Block wird ausgeführt, sobald die Schleife beendet ist — in diesem Fall befindet sich print("Liftoff!") nicht innerhalb der Schleife.

Schleife bis eine Liste leer ist

Jedes Objekt mit einem boolean-Wert funktioniert als Bedingung. Eine leere Liste ist falsy, sodass man eine Liste auf natürliche Weise leeren kann:

stack = [1, 2, 3]
while stack:
    print(stack.pop())

Ausgabe:

3
2
1

while stack ist eine Kurzform für while len(stack) > 0. Sobald die Liste leer ist, ist sie falsy und die Schleife endet.


Die break-Anweisung

break beendet die Schleife sofort, unabhängig von der Bedingung.

python— editable, runs on the server

Ausgabe:

0
1
2
3
4

Wenn num gleich 5 ist, wird break ausgelöst und die Schleife beendet — 5 bis 9 werden nie erreicht.

Wann break verwendet werden sollte: Eine Suche stoppen, sobald eine Übereinstimmung gefunden wurde; eine Schleife abbrechen, wenn ein Fehlerzustand auftritt; eine Menü-Schleife beenden, wenn der Benutzer "Beenden" wählt.


Die continue-Anweisung

continue überspringt den Rest der aktuellen Iteration und springt direkt zurück zur Bedingungsprüfung.

i = 0
while i < 8:
    i += 1
    if i % 2 == 0:
        continue
    print(i)

Ausgabe:

1
3
5
7

Wenn i gerade ist, überspringt continue den Aufruf print(i) und die Schleife kehrt zurück, um die Bedingung mit dem aktualisierten i auszuwerten.

Wichtig: Den Zähler vor der continue-Prüfung erhöhen, nicht danach. Würde i += 1 nach continue stehen, bliebe i für immer gerade und die Schleife würde endlos laufen.


Die else-Klausel

Pythons while-Schleife unterstützt einen optionalen else-Block. Er wird nur ausgeführt, wenn die Schleife normal geendet hat — d. h. die Bedingung wurde False — und wird übersprungen, wenn die Schleife durch break beendet wurde.

Normaler Abschluss

i = 1
while i <= 3:
    print(i)
    i += 1
else:
    print("Done!")

Ausgabe:

1
2
3
Done!

Durch break unterbrochene Schleife

i = 1
while i <= 5:
    if i == 3:
        break
    print(i)
    i += 1
else:
    print("No break")

Ausgabe:

1
2

"No break" wird nie ausgegeben, weil break die Schleife beendet hat, bevor die Bedingung False werden konnte.

Praktische Anwendung: Lineare Suche

Die else-Klausel ist besonders nützlich für Suchmuster. Der else-Block wird nur ausgeführt, wenn das Ziel nicht gefunden wurde:

numbers = [4, 7, 2, 9, 1]
target = 9
i = 0
while i < len(numbers):
    if numbers[i] == target:
        print("Found", target, "at index", i)
        break
    i += 1
else:
    print(target, "not found")

Ausgabe:

Found 9 at index 3

Verschachtelte while-Schleifen

Eine while-Schleife kann eine weitere while-Schleife enthalten. Die innere Schleife führt alle ihre Iterationen für jede einzelne Iteration der äußeren Schleife durch.

row = 1
while row <= 3:
    col = 1
    while col <= 3:
        print(row * col, end="  ")
        col += 1
    print()
    row += 1

Ausgabe:

1  2  3  
2  4  6  
3  6  9  

Achtung: Ein break innerhalb der inneren Schleife beendet nur die innere Schleife. Um beide Schleifen gleichzeitig zu beenden, verwendet man eine Flag-Variable oder strukturiert den Code in eine Funktion um und nutzt return.


Die pass-Anweisung

pass ist ein No-Op-Platzhalter. Verwenden Sie ihn, wenn eine while-Schleife syntaktisch erforderlich ist, der Rumpf aber noch nicht implementiert ist:

i = 0
while i < 3:
    pass  # TODO: add logic later
    i += 1

Ohne pass würde Python einen IndentationError auslösen, weil ein leerer Block keine gültige Syntax ist.


Endlosschleifen

Eine Endlosschleife läuft für immer, weil ihre Bedingung niemals False wird. Dies ist fast immer ein Fehler — aber es gibt auch beabsichtigte Einsatzmöglichkeiten.

Versehentliche Endlosschleife

# WARNING: this loop never ends — do not run
i = 1
while i <= 5:
    print(i)
    # forgot to increment i

Ohne i += 1 bleibt i bei 1, die Bedingung ist immer True und die Schleife läuft, bis man das Programm manuell stoppt (Ctrl+C).

Beabsichtigte Endlosschleife mit break

# WARNING: intentional infinite loop — requires Ctrl+C to stop outside an app
while True:
    answer = input("Type 'quit' to exit: ")
    if answer == "quit":
        break
    print("You typed:", answer)

while True ist ein bewusstes Idiom für "weiter laufen, bis explizit gestoppt wird." Es muss immer ein break (oder ein return) irgendwo im Inneren vorhanden sein, sonst hängt das Programm.

Weitere Muster mit interaktiven Schleifen finden Sie im Kapitel Python-Benutzereingabe.


While-Schleifen vs. for-Schleifen

SituationEmpfehlung
Die Anzahl der Iterationen ist bekannt oder eine Sequenz vorhandenfor
Die Schleife läuft, bis sich eine Bedingung ändertwhile
Eingaben lesen, bis der Benutzer beendetwhile True + break
Index und Wert aus einer Liste benötigtfor + enumerate()
Eine Datenstruktur leeren oder verarbeitenwhile

for verwenden, wenn möglich; zu while wechseln, wenn die Endbedingung dynamisch oder zu Beginn der Schleife unbekannt ist.


Übungen

Übung
What does the else clause of a while loop do?
What does the else clause of a while loop do?
Übung
What are the functionalities of 'while' loops in Python as described in the W3Docs tutorial?
What are the functionalities of 'while' loops in Python as described in the W3Docs tutorial?
Übung
Which of the following would cause a while loop to run forever?
Which of the following would cause a while loop to run forever?
Was this page helpful?