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
n = 1
while n < 1000:
n = n * 2
n # 1024Der 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:
i = 0
while i < 5:
print(i)
i = i + 1Endlosschleife + interne Abbruchbedingung — nützlich, wenn die Bedingung nach einer Aktion ausgewertet wird:
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:
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
Finde den kleinsten Integer `n >= 1` so, dass 2**n eine Million überschreitet. Weise ihn `result` zu und evaluiere ihn (er sollte 20 sein).
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
Halbiere n ausgehend von `n = 1000`, bis es zu 0 wird. Zähle in `steps`, wie viele Iterationen benötigt werden. Evaluiere `steps`.
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
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.
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