Loop durch Zahlenreihe#

Wir können die durch range() produzierte Zahlenreihe nun auch als diejenige Menge nehmen, durch die ein For-Loop looped, nacheinander ein Element herausgreift und für jedes Element irgendetwas macht. Das Gute ist, dass wir ein range-Objekt nicht zwingend in eine richtige Liste umwandeln müssen, wenn wir über die produzierte Zahlenreihe loopen wollen. Denn For-Loops können ja nicht nur über Listen loopen, sondern ganz allgemein über sogenannte iterierbare Objekte. Eine Liste ist ein solches iterierbares Objekt, das durch die Funktion range() produzierte range-Objekt ist aber glücklicherweise auch “iterierbar”, sodass der For-Loop auch ein solches “lesen” kann.

Im untigen Beispiel loope ich über eine Zahlenreihe der Länge 5 und führe für jede Zahl der Zahlenreihe den Befehl print("hello world") aus. Die konkreten Zahlen des range-Objektes sind uns dabei komplett egal, uns geht es hier nur darum, dass der Loop 5 Runden lang läuft.

for i in range(5):
    print("2 Kugeln Eis bitte!")
2 Kugeln Eis bitte!
2 Kugeln Eis bitte!
2 Kugeln Eis bitte!
2 Kugeln Eis bitte!
2 Kugeln Eis bitte!

Beachte auch hier wieder, dass die Schleifenvariable i eigentlich komplett willkürlich benannt werden kann. Wir hätten auch for blablabla in range(5): schreiben können. Es hat sich aber eingebürgert, für das Loopen über reine Zahlenreihen ein i als Name für die Schleifenvariable zu verwenden (wenn möglich). Das i steht dabei für Integer, Index, Iterator oder “incrementing number”.

Wie bei jedem For-Loop gilt auch bei For-Loops auf Basis der Funktion range(), dass die Schleifenvariable in jeder Runde den Wert des gerade durch den For-Loop aufgerufenen Elements der Liste bzw. des iterierbaren Objekts annimmt. Wir haben das i oben im Loop vollkommen ignoriert. Wenn wir es aber für irgendetwas brauchen, dann können wir es natürlich auch wieder im Code-Block des For-Loops verwenden, wie ich es hier tue:

for i in range(5):
    print(i, "Kugeln Eis bitte!")
0 Kugeln Eis bitte!
1 Kugeln Eis bitte!
2 Kugeln Eis bitte!
3 Kugeln Eis bitte!
4 Kugeln Eis bitte!

Besonders hilfreich ist die Funktion range() auch dann, wenn innerhalb eines For-Loops die Schleifenvariable dazu genutzt werden soll, um per Indizierung auf die Elemente einer Liste zuzugreifen. Denn ganz zufälligerweise fangen ja auch die Indizes von Listen bei 0 an. Wir könnten also den jeweiligen Wert der Schleifenvariable nutzen, um damit per Index an die bestimmten Elemente einer Liste zu kommen.

Unten erstelle ich zunächst die Liste ABC. Innerhalb eines For-Loops wird dann nacheinander per Indizierung auf die Elemente der Liste ABC zugegriffen. Der jeweilige Index wird dabei aus der durch range(5) produzierten Zahlenreihe entnommen und in jeder Runde des Loops der Schleifenvariable i zugeordnet.

ABC = ["a", "b", "c", "d", "e"]
ABC
['a', 'b', 'c', 'd', 'e']
for i in range(5):
    print(ABC[i])
a
b
c
d
e

Wir werden später noch lernen, warum es manchmal sinnvoll bzw. notwendig ist, per Indizierung auf die Elemente einer Liste zuzugreifen, statt direkt über die Schleifenvariable des For-Loops. Wichtiger ist hier zunächst was anderes: Im obigen Beispiel war es noch einfach die richtige Länge der Liste ABC im Kopf abzuzählen, um dann die Länge 5 an range() zu übergeben, damit wir eine Zahlenreihe der richtigen Länge und somit die richtigen Indizes für den Listenzugriff erhalten. Was ist aber, wenn wir die Länge der Liste gar nicht kennen, weil sie z.B. sehr lang ist oder sich im Verlauf des Programms immer wieder ändert? Dann hilft uns die Funktion len() weiter!

Im Folgenden übergebe ich range() die Länge der Liste ABC dadurch, dass ich sie mit len() messe:

for i in range(len(ABC)):
    print(ABC[i])
a
b
c
d
e