Kapitel 7
Arbeit mit Schleifen wiederholen
Wiederhole, ohne zu kopieren
Am Ende des letzten Kapitels hast du deinen Organizer mit vier fast gleichen Zeilen ausgegeben:
print(f"1. {items[0]}")
print(f"2. {items[1]}")
print(f"3. {items[2]}")
print(f"4. {items[3]}")
Das hat funktioniert, und das Ausschreiben war beabsichtigt. Es hat aber auch ein bereits erkennbares Problem: Das Programm kann nur vier Einträge ausgeben. Ein fünfter bleibt unsichtbar, bis du eine weitere print-Zeile schreibst. Entfernst du einen, hält das Programm mit einem IndexError an.
Die Anzahl der Einträge gehört zu den Daten. Im Moment ist sie fest in den Code eingebaut.
Das Muster wiederholter Arbeit
Sieh dir die vier Zeilen noch einmal an und achte darauf, was sich tatsächlich ändert. Das Wort print bleibt gleich. Der f-String bleibt gleich. Nur zwei Dinge ändern sich: die Nummer und der Index in den Klammern.
Wenn du fast dieselbe Zeile mehrmals schreibst, hat Python ein besseres Werkzeug: eine Schleife. Damit schreibst du die wiederholte Arbeit nur einmal.
Eine erste for-Schleife
Hier ist dieselbe Idee als Schleife:
Vier Ausgabezeilen aus zwei Codezeilen.
Lies die erste Zeile wie einen Satz: „für jedes item in items“. Das kommt dem Verhalten von Python nahe. Es nimmt die Liste, übergibt dir den ersten Wert, führt den eingerückten Block aus, übergibt den nächsten Wert und fährt fort, bis die Liste durchlaufen ist.
Die Bestandteile der Zeile
for item in items:
| Bestandteil | Bedeutung |
|---|---|
for | Das Schlüsselwort, das die Schleife beginnt |
item | Die Schleifenvariable, ein Name, den du wählst |
in | Das Schlüsselwort, das den Namen von der Sammlung trennt |
items | Die Liste, die Python durchläuft |
: | Der Doppelpunkt am Zeilenende, wie bei einer if-Anweisung |
Alles, was unter dieser Zeile eingerückt ist, bildet den Schleifenrumpf. Python führt den gesamten Rumpf einmal pro Wert aus.
Die Einrückungsregel kennst du bereits von if. Eingerückte Zeilen gehören zur Schleife. Zeilen, die wieder am linken Rand stehen, laufen nach dem Ende der Schleife:
Done erscheint einmal am Ende. Es ist nicht eingerückt und gehört deshalb nicht zur wiederholten Arbeit.
Du wählst den Namen der Schleifenvariablen
item und color sind keine besonderen Wörter. Es sind normale Variablennamen. Python weist dem Namen jeden Wert der Reihe nach zu. Wähle einen Namen, der ein einzelnes Element der Sammlung beschreibt:
Ein Name im Plural für die Liste und einer im Singular für die Schleifenvariable lassen sich gut lesen und helfen dir, beide auseinanderzuhalten.
Der Schleife ist die Anzahl egal
Das löst das Problem des Organizers. Dieselben zwei Zeilen funktionieren für drei Werte oder dreißig:
In der Schleife steht keine Anzahl. Wenn du Elemente zur Liste hinzufügst oder entfernst, folgt die Schleife einfach den Daten.
Ist die Liste leer, gibt es keine Werte zu besuchen. Dann läuft der Rumpf nullmal. Zeilen nach der Schleife laufen trotzdem. Probiere im Beispiel oben, tasks durch [] zu ersetzen.
Wie oft läuft die eingerückte Zeile?
sizes = [8, 12, 16, 20]
for size in sizes:
print(size)
Welche Zeile oder Zeilen gehören zum Schleifenrumpf?
animals = ["otter", "heron"]
for animal in animals:
print(animal)
print("Seen")
print("Walk finished")
Was du gewonnen hast
Die Schleife ist kurz, aber sie erweitert die Möglichkeiten deiner Programme erheblich. Bisher erledigte ein Programm eine feste Menge Arbeit, die du von Hand ausgeschrieben hast. Ab jetzt kann ein kleiner Codeblock mit Sammlungen jeder Größe umgehen.
In der nächsten Lektion schreibst du selbst Schleifen und beobachtest, wie die Schleifenvariable in jedem Durchlauf ihren Wert ändert.
Aufgabe
Führe jedes Beispiel aus und ändere probeweise eine Liste, bevor du fortfährst. Prüfe vor dem Weitergehen, ob du erklären kannst:
welche Teile der vier Ausgabezeilen des Organizers tatsächlich wiederholt wurden;
welchen Wert die Schleifenvariable in jedem Durchlauf des Rumpfs hält;
wie Python entscheidet, welche Zeilen in der Schleife stehen und welche danach kommen;
warum das Hinzufügen eines Listenelements keine Änderung an der Schleife erfordert.