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.