Skip to content

Schleifen

Schleifen sind ein Weg, Operationen mehrfach auszuführen. Dabei werden häufig zwei Schleifentypen verwendet, die inhaltlich identisch sind, allerdings sich auf unterschiedliche Schwerpunkte konzentrieren: for und while.

Die Faustregel lautet: Ist die Anzahl der Schleifendurchläufe bekannt, so wird die for-Schleife verwendet. Ist die Anzahl der Schleifendurchläufe unbekannt, so wird die while-Schleife verwendet. Zwar lässt Python beides zu, aber der Code ist mit dieser Regel deutlich lesbarer.

In einer for-Schleife wird eine Sequenz von Elementen durchlaufen, also ein beliebiges iterable. Das ist z.B. eine Liste. In jedem Schleifendurchlauf wird das nächste Element der Sequenz in eine Variable geschrieben. Die Schleife endet, wenn die Sequenz zuende ist.

for i in [1, 2, 3]:
    print (i)

In einer while-Schleife wird eine Bedingung geprüft. Solange diese wahr ist, wird der Schleifenblock immer und immer wieder ausgeführt. Die Schleife endet erst, sobald die Bedingung beim nächsten Abschluss des Blocks nicht mehr wahr ist. Der letzte Schleifenblock wird aber immer zuende ausgeführt:

i = 1
while i <= 3:
    print (i)
    i += 1
    print ("Fertig")

Hier werden die Zahlen 1-3 und "Fertig" im Wechsel ausgegeben. Das letzte "Fertig" wird mit ausgegeben, obwohl zu dem Zeitpunkt i bereits 4 ist und damit die Bedingung im Schleifenkopf nicht mehr erfüllt ist.

Einzelne Elemente überspringen

Will man Teile der Liste überspringen, so kann man das Schlüsselwort continue verwenden:

for i in [1, 2, 3, 4, 5, 6]:
    if i % 2 == 0:
        continue
    print (i)

Hier werden nur die ungeraden Zahlen ausgegeben: jeder Schleifenblock wird übersprungen, sobald das Schlüsselwort continue erreicht wird, das außerhalb von Schleifen nicht zugelassen ist.

Frühzeitig abbrechen

Analog zu continue, was den aktuellen Schleifendurchlauf vorzeitig beendet, lässt sich die gesamte Schleife abbrechen, obwohl noch nicht alle Elemente durchlaufen wurden oder die Abbruchbedingung erfüllt ist. Dazu wird das Schlüsselwort break verwendet:

for i in [1, 2, 3, 4, 5, 6]:
    if i == 4:
        break
    print (i)

Hier werden die Zahlen 1-3 ausgegeben, dann wird die Schleife und der aktuelle Schleifendurchlauf abgebrochen. Das ist z.B. dann hilfreich, wenn man ein einzelnes Element in einer Liste finden will.

Auf den ersten Blick verwirrend ist es, dass else mit Schleifen (sowohl for als auch while) verbunden werden kann. Das else wird dann ausgeführt, wenn die Schleife nicht durch ein break abgebrochen wurde. Das ist z.B. dann hilfreich, wenn man einen Standardfall abdecken möchte:

values = [1, 2, 3, 4, 5, 6]

# find and print a number > 10
for value in values:
    if value > 10:
        print (value)
        break
else:
    print ("Die enthält keine Zahl größer 10.")

Das spart die anderenfalls nötige Hilfsvariable, die prüft, ob ein Element gefunden wurde:

values = [1, 2, 3, 4, 5, 6]
found = False
for value in values:
    if value > 10:
        print (value)
        found = True
        break
if not found:
    print ("Die enthält keine Zahl größer 10.")

Indizierung

Möchte man wissen, das wievielte Element einer Liste man gerade vor sich hat, kann man dazu enumerate nutzen:

for i, value in enumerate([1, 2, 3, 4, 5, 6]):
    print (i, value)

Dabei enthält i immer den Index des Elements (wie immer beginnend bei 0), value den Wert des Elements.

Zeichenketten

Zeichenketten sind auch iterable, dabei werden sie als Liste von Zeichen betrachtet:

for char in "Hallo":
    print (char)

Gibt die Zeichen "H", "a", "l", "l", "o" aus.

Dictionaries

Man kann über alle Elemente eines Dictionaries iterieren. Dabei wird immer das Schlüssel-Wert-Paar zurückgegeben:

elements = {"H": "Wasserstoff", "He": "Helium", "Li": "Lithium"}
for element, name in elements.items():
    print (element, name)

Gibt die Elemente und ihre Namen aus.