Direkt zum Hauptinhalt springen
eLearner.app
Modul 2 · Lektion 2 von 46/36 im Kurs~8 min
Lektionen des Moduls (2/4)

while-Schleifen

Die while-Schleife wiederholt einen Block, solange eine Bedingung wahr bleibt. Verwende while, wenn du nicht im Voraus weißt, wie viele Iterationen du benötigen wirst: Die Anzahl der Runden hängt von etwas ab, das sich innerhalb der Schleife ändert.

Syntax

Python
n = 1
while n < 1000:
    n = n * 2
n  # 1024

Der eingerückte Block wird wiederholt ausgeführt. Vor jeder Iteration wertet Python die Bedingung aus: Sobald sie falsch wird, endet die Schleife und die Ausführung wird nach dem Block fortgesetzt.

Häufige Muster

Manueller Zähler — entspricht einem klassischen for in anderen Sprachen:

Python
i = 0
while i < 5:
    print(i)
    i = i + 1

Endlosschleife + interne Abbruchbedingung — nützlich, wenn die Bedingung nach einer Aktion ausgewertet wird:

Python
acc = 0
while True:
    acc = acc + 1
    if acc * acc > 100:
        break
acc  # 11   (11*11 = 121 is the first square > 100)

break beendet sofort die innerste Schleife.

Der klassische Fehler: die Endlosschleife

Wenn sich die Variable in der Bedingung innerhalb der Schleife nicht ändert, endet das Programm nie. Dies ist der Fehler Nummer eins bei while:

Python
n = 0
while n < 10:
    print(n)   # n is never modified → infinite loop!

In unseren Übungen gibt es ein Ausführungs-Timeout, sodass eine Endlosschleife mit einer klaren Meldung fehlschlägt, anstatt den Browser einzufrieren. Aber in der Produktion ist eine Endlosschleife ein schwerwiegender Fehler.

Risiko von Endlosschleifen und Abbruchbedingungen

Eine while-Schleife wird ausgeführt, solange ihre Bedingung True ergibt. Wenn du vergisst, die Variablen zu aktualisieren, die die Bedingung beeinflussen, läuft deine Schleife endlos und friert die Laufzeit ein. Stelle immer sicher, dass der Schleifenkörper Fortschritte in Richtung der Austrittsbedingung macht.

Probiere es aus

Übung#python.m2.l2.e1
Versuche: 0Wird geladen…

Finde den kleinsten Integer `n >= 1` so, dass 2**n eine Million überschreitet. Weise ihn `result` zu und evaluiere ihn (er sollte 20 sein).

Editor wird geladen…
Hinweis anzeigen

2**20 = 1.048.576 ist die erste Zahl, die 1.000.000 überschreitet.

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#python.m2.l2.e2
Versuche: 0Wird geladen…

Halbiere n ausgehend von `n = 1000`, bis es zu 0 wird. Zähle in `steps`, wie viele Iterationen benötigt werden. Evaluiere `steps`.

Editor wird geladen…
Hinweis anzeigen

1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0: zehn Schritte.

Lösung nach 3 Versuchen verfügbar

Zusätzliche Herausforderung

Übung#python.m2.l2.e3
Versuche: 0Wird geladen…

Schreibe bei der Variablen `n = 32`, eine `while`-Schleife, um zu zählen, wie oft du `n` durch 2 teilen kannst (unter Verwendung der Ganzzahldivision `//`), bevor `n` kleiner oder gleich 1 wird. Speichere die Anzahl in `divisions` und evaluiere sie.

Editor wird geladen…
Hinweis anzeigen

Die while-Bedingung ist n > 1. Teile in der Schleife n durch 2 und erhöhe divisions um 1.

Lösung nach 3 Versuchen verfügbar