Schleifen
Schleifen sind Kontrollstrukturen, die dazu dienen, einen Anweisungsblock – den sogenannten Schleifenrumpf oder Schleifenkörper – zu wiederholen solange die Schleifenbedingung als Laufbedingung erfüllt ist bzw. als Abbruchbedingung nicht eintritt.
Schleifen können beliebig verschachtelt werden: Innerhalb des Schleifenkörpers der äußeren Schleife befindet sich wiederum eine Schleife.
for
Bei einer for-Schleife durchläuft eine Laufvariable Werte, die durch eine Iterationsvorschrift mit Anfangswert und Laufbedingung vorgegeben sind.
Im einfachsten Fall soll der Anweisungsblock N-mal durchlaufen werden und die Laufvariable nacheinander die ganzzahligen Werte 0 bis N-1 annehmen; der Anfangswert ist dann 0 und die Laufbedingung Laufvariable < N. In Python wird dafür das Range-Objekt gebraucht:
| Beispiel | Ausgabe |
|---|---|
for i in range(3):
print(f"{i = }, {i**2 = }")
print(f"Schleife beendet: {i = }")
|
i = 0, i**2 = 0
i = 1, i**2 = 1
i = 2, i**2 = 4
Schleife beendet: i = 2
|
Die Laufvariable (hier i) behält auch nach Ende der Schleife ihre Gültigkeit und den letzten Wert.
Wie im Kapitel Datentypen beschrieben, muss bei range mindestens der Parameter stop angegeben werden, optional können die Parameter start und step (Schrittweite) angegeben werden. Je nachdem, welche Parameter angegeben werden, durchläuft die Laufvariable (im Beispiel i) folgende Werte:
| range(stop): | i = 0, 1, ..., stop-1 | also 0 ≤ i < stop |
| range(start, stop): | i = start, start+1, ..., stop-1 | also start ≤ i < stop |
| range(start, stop, step): | i = start, start+step, ... | so dass start ≤ i < stop für step > 0
und start ≥ i > stop für step < 0 |
Wenn bei positiver Schrittweite start ≥ stop oder bei negativer Schrittweite start ≤ stop ist, wird der Anweisungsblock nicht ausgeführt.
Die allgemeine Form der for-Schleife ist
for Element in Objekt:
Anweisungsblock
Sie durchläuft alle in einem iterierbaren Objekt enthaltenen Elemente; das Objekt sollte dabei im Anweisungsblock nicht verändert werden. Objekte der integrierten Datentypen str, list, tuple, range, dict und set sind iterierbar. Auch Dateien, die im Text-Modus geöffnet wurden, sind iterierbar, dabei zählt jede Textzeile als ein Element vom Typ str (mit "\n" endend).
| Beispiel | Ausgabe |
|---|---|
for x in ["string1", 81, "string2"]:
print(x)
|
string1
81
string2
|
Wird in einer for-Schleife zusätzlich zu den Elementen des Objekts auch der jeweilige Index benötigt, kann dafür enumerate verwendet werden; enumerate liefert ein aus einer ganzen Zahl und dem Element bestehendes Tupel:
| Beispiel | Ausgabe |
|---|---|
for i, x in enumerate(["string1", 81, "string2"]):
print(i, x)
|
0 string1
1 81
2 string2
|
Die allgemeine Syntax sieht so aus: enumerate(Objekt, start). Der Parameter "start" gibt den Startwert des Index an und ist optional, der Defaultwert ist 0; ein Parameter für die Schrittweite fehlt allerdings.
while
Eine while-Schleife wird wiederholt, solange eine Bedingung erfüllt (True) ist; die Bedingung wird dabei zu Beginn jedes Durchlaufs geprüft. Der Wert der Bedingung muss sich innerhalb des Anweisungsblocks (zum Beispiel durch Berechnungen) von True nach False ändern, wenn keine Endlosschleife entstehen soll.
Allgemeine Form der while-Schleife:
while Bedingung:
Anweisungsblock
| Beispiel | Ausgabe |
|---|---|
n = 2
while n < 100:
print(n)
n *= 2
|
2
4
8
16
32
64
|
Es gibt kein do ... while oder repeat ... until in Python.
Bei Bedarf kann das wie folgt nachgebildet werden:
while True: # do
Anweisungsblock
if not Bedingung: break # while Bedingung
Oder
while True: # repeat
Anweisungsblock
if Bedingung: break # until Bedingung
break
Sowohl for- als auch while-Schleifen können mit break im Anweisungsblock abgebrochen werden. Die Programmausführung wird dann mit der auf die Schleife folgenden Anweisung fortgesetzt. In verschachtelten Schleifen werden äußere Schleifen nicht abgebrochen.
continue
Mit continue im Anweisungsblock kann der Rest der Schleife übersprungen werden; die Schleifenbedingung wird dann erneut geprüft und ggf. der nächste Schleifendurchlauf begonnen, bei for-Schleifen mit dem nächsten Element der Sequenz.
Schleifen-else
Eine Besonderheit von Python ist, dass es bei for- und while-Schleifen auch ein else gibt.[1] Der else-Block wird immer dann ausgeführt, wenn die Schleifenbedingung nicht erfüllt ist, also nach Vollendung der Schleifendurchläufe oder wenn die Bedingung von Anfang an nicht erfüllt ist. Das heißt, dieser Block wird nur dann nicht ausgeführt, wenn die Schleife durch break, return oder einen Fehler abgebrochen wurde.
| Beispiel | Ausgabe |
|---|---|
for i in range(1, 3):
print(f"{i = }")
else:
print("Schleife wurde nicht abgebrochen")
|
i = 1
i = 2
Schleife wurde nicht abgebrochen
|
for i in range(1, 9):
print(f"{i = }")
if i > 1: break
else:
print("Schleife wurde nicht abgebrochen")
|
i = 1
i = 2
|