Wiederholungsstrukturen
https://oer-informatik.de/python_wiederholungsstrukturen
tl/dr; (ca. 12 min Lesezeit): Wer die Wahl hat, hat die Qual: mit den alternativen Kontrollstrukturen (If-Statements) halten die Suites (Einrückungen) erstmals Einzug in Python. Und die Enttäuschung, weil Mehrfachauswahlen in Python recht umständlich realisiert werden müssen.
Zählergesteuerte Schleifen
In Python werden Zählergesteuerte Schleifen über die Methode range()
realisiert. Soll beispielsweise eine Operation zehnmal ausgeführt werden, so wird sie folgendermaßen notiert:
In der Variablen i
wird jeweils die Anzahl der Durchläufe gespeichert. Augenscheinlich werden zwar 10 Werte augegeben, jedoch von 0 bis 9. (Python ist also Null-Index-basiert, wie die meisten anderen Programmiersprachen). Die range()
- Methode lässt jedoch auch zu, dass wir bei jedem erdenklichen Wert starten und stoppen. Der Startwert wird immer im ersten Durchlauf genutzt, der Stopwert ist derjenige Wert, bei dem die Schleife nicht mehr ausgeführt wird. Folgendes Beispiel würde also nur neun Werte (1-9) ausgeben:
Start und Stopwert können auch direkt in die range()
-Funktion eingegeben werden:
Die Zählvariable (hier: i
) bleibt auch nach der Schleife erhalten und kann ausgelesen werden. Neben dem Start- und Stopwert kann auch noch die Schrittweite jedes Schleifendurchlaufs angegeben werden, per default ist das 1
:
zaehle_von = 1
zaehle_bis_vor = 10
schrittweite = 1
for i in range(zaehle_von, zaehle_bis_vor, schrittweite):
print("aktuell: ", i)
Die Schrittweite kann jedoch auch andere Ganzzahlen als Wert haben - auch negative Zahlen sind möglich, dann wird rückwärts gezählt.
break
und continue
Bei continue
wird nur der aktuelle Schleifendurchlauf abgebrochen und mit dem nächsten Schleifendurchlauf begonnen.
for i in range(1, 10, 1):
if i%2==0:
print(i, " gerade")
continue
else:
print(i, " ungerade")
print("-------")
Nachdem ausgegeben wurde, dass es sich um eine gerade Zahl handelt wird direkt in den nächsten Schleifendurchlauf gesprungen. die Ausgabe von -------
erfolgr daher nur nach ungeraden Zahlen:
1 ungerade
-------
2 gerade
3 ungerade
-------
4 gerade
5 ungerade
-------
6 gerade
7 ungerade
-------
8 gerade
9 ungerade
-------
Weitgehender ist der Abbruch bei break
: hier wird die gesamte Schleife abgebrochen:
for i in range(1, 10, 1):
if i%2==0:
print(i, " gerade")
break
else:
print(i, " ungerade")
print("-------")
Sobald die erste gerade Zahl auftritt wird die komplette Schleife abgebrochen:
1 ungerade
-------
2 gerade
Python-Besonderheit: der else
-Block bei Schleifen
Im Gegensatz zu den meisten anderen Programmiersprachen bietet Python die Möglichkeit, einen else
-Block an die Schleife anzuhängen, der ausgeführt wird, wenn die Schleife beendet wurde. Nur in dem Fall, dass das Schleifenende durch ein break
-Statement hervorgerufen wurde, wird diese Suite nicht ausgeführt.
for i in range(1, 2):
if i%2==0:
print(i, " gerade")
break
else:
print(i, " ungerade")
print("-------")
else:
print("Regulär beendet")
Kopfgesteuerte Wiederholungsstrukturen
Beenden mit "exit": Guten Morgen!
Beenden mit "exit": Hallo
Beenden mit "exit": exit
Tschüss
Analog zu zählergesteuerten Schleifen funktionieren hier auch break
, continue
und else
:
eingabe = ""
while eingabe != "exit":
eingabe = input('Beenden mit "exit": ')
if eingabe == "ende":
break
else:
print("Bis bald")
print("Tschüss")
Fußgesteuerte Wiederholungsstrukturen
In vielen Programmiersprachen wird unterschieden zwischen Schleifen, deren Bedingung vor dem ersten Durchlauf geprüft wird (kopfgesteuert / while
) und Schleifen, die einmal durchlaufen werden, und erst vor der ersten Wiederholung die Bedingung prüfen (fußgesteuert / do while
). Python kennt diese Unterscheidung nicht.
Wir haben aber bei dem obigen Beispiel bereits eine Schleife programmiert, deren Operationen in jedem Fall einmal durchlaufen werden. Die Schleifenbedingung haben wir vor Eintritt in die Schleife mit eingabe = ""
auf True
gesetzt, und so einen ersten Durchlauf garantiert. Auf diese Weise muss man fußgesteuerte Schleifen in Python implementieren.
Wer den Unterschied zwischen kopfgesteuerten und fußgesteuerten Schleifen nochmal bildhaft unterstützt lernen will, der sollte sich das Bild von den Zeichentrickfiguren Coyote und Roadrunner mal ansehen, z.B. hier
Iteration durch Objektsammlungen mit Wiederholungsstrukturen
Schleifeniterationen sind nicht nur durch range()
-Objekte möglich, sondern auch durch andere Objektsammlungen. Der Aufbau ist immer ähnlich:
Beispielsweise werden Zeichenketten als Sammlung einzelner Zeichen begriffen. Dieser Aufruf buchstabiert demnach übergebene Wörter:
Fazit
Auch bei Wiederholungsstrukturen weist Python einige Besonderheiten im Vergleich zu anderen Programmiersprachen auf:
Es werden häufiger
for
-Schleifen gewählt. Mit demrange
-Objekt verfügt Python über eine Syntax, die stark von der anderer Sprachen abweicht.do-while
-Schleifen gibt es gar nicht, sie müssen selbst aus einer While-Schleife erstellt werden, in dem die Schleifenbedingung vorab aufTrue
gesetzt wird.Ein
else
-Block bei Schleifen mag auf den ersten Blick verwundern, es gibt aber in Kombination mit dembreak
-Block durchaus sinnvolle Anwendungsfälle.
Mit Wiederholungsstrukturen und bedingten Anweisungen werden die Programme zunehmend komplex. Höchste Zeit, sie in einzeln aufrufbare Codeblöcke zu unterteilen: [die Funktionen](https://oer-informatik.de/python_funktionen].
Links und weitere Informationen
Quellen und offene Ressourcen (OER)
Die Ursprungstexte (als Markdown), Grafiken und zugrunde liegende Diagrammquelltexte finden sich (soweit möglich in weiterbearbeitbarer Form) in folgendem git-Repository:
http://gitlab.com/oer-informatik/db-sql/dbms.
Sofern nicht explizit anderweitig angegeben sind sie zur Nutzung als Open Education Resource (OER) unter Namensnennung (H. Stein, oer-informatik.de) freigegeben gemäß der Creative Commons Namensnennung 4.0 International Lizenz (CC BY 4.0).
Hinweis zur Nachnutzung
Dieses Werk und dessen Inhalte sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: “Erste Schritte mit Python” von Hannes Stein, Lizenz: CC BY 4.0. Die Quellen dieses Werks sind verfügbar auf GitLab.