Schleifen in Python
Schleifen in Python
Was ist eine Schleife?
Eine Schleife führt einen Codeblock mehrfach aus.
Ohne Schleife müsste eine Anweisung mehrfach geschrieben werden:
print("Hallo")
print("Hallo")
print("Hallo")
Mit einer Schleife genügt:
for i in range(3):
print("Hallo")
Ausgabe:
Hallo
Hallo
Hallo
Schleifen werden verwendet, wenn:
- eine Anweisung mehrfach ausgeführt werden soll,
- Zahlen oder Elemente durchlaufen werden sollen,
- ein Vorgang wiederholt werden soll, solange eine Bedingung erfüllt ist.
Die beiden wichtigsten Schleifenarten in Python sind:
forwhile
Die for-Schleife
Eine for-Schleife wird meistens verwendet, wenn die Werte oder die Anzahl der Durchläufe vorher bekannt sind.
Beispiel
for i in range(5):
print(i)
Ausgabe:
0
1
2
3
4
Die Variable i erhält in jedem Durchlauf einen neuen Wert.
Der Ablauf entspricht ungefähr:
i = 0
print(i)
i = 1
print(i)
i = 2
print(i)
i = 3
print(i)
i = 4
print(i)
Die Schleifenvariable
Die Variable i ist eine normale Variable.
Sie erhält in jedem Durchlauf den nächsten Wert aus range(...).
for i in range(4):
print(i * 2)
Die Werte von i sind:
0
1
2
3
Für jeden Wert wird i * 2 berechnet:
0 * 2 = 0
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
Ausgabe:
0
2
4
6
Wichtiger Ablauf
Zuerst werden die Werte von i bestimmt.
Danach wird jeder einzelne Wert in den eingerückten Schleifenblock eingesetzt.
1. Werte von i aufschreiben
2. Jeden Wert in print(...) einsetzen
3. Vollständige Ausgabe notieren
Der eingerückte Schleifenblock
Eine Schleife wiederholt den gesamten eingerückten Codeblock.
for i in range(3):
print(i)
print("Test")
Ausgabe:
0
Test
1
Test
2
Test
In jedem Durchlauf werden beide print-Anweisungen ausgeführt.
range(ende)
Bei:
range(5)
beginnt Python bei 0.
Der Endwert gehört nicht mehr dazu.
0
1
2
3
4
Beispiel:
for i in range(5):
print(i)
Ausgabe:
0
1
2
3
4
Merksatz
range(5)erzeugt fünf Werte, beginnt aber bei0und endet bei4.
range(start, ende)
Bei:
range(3, 8)
ist der Startwert enthalten.
Der Endwert ist ausgeschlossen.
Die Werte sind:
3
4
5
6
7
Beispiel:
for i in range(3, 8):
print(i)
Ausgabe:
3
4
5
6
7
Merksatz
Der Startwert gehört dazu. Der Endwert gehört nicht dazu.
Mathematisch:
start <= i < ende
range(start, ende, schrittweite)
Der dritte Wert bestimmt die Schrittweite.
for i in range(0, 10, 2):
print(i)
Die Schleife beginnt bei 0 und erhöht i immer um 2.
Ausgabe:
0
2
4
6
8
Die 10 wird nicht mehr ausgegeben, weil der Endwert ausgeschlossen ist.
Ein weiteres Beispiel:
for i in range(2, 12, 3):
print(i)
Die Werte von i sind:
2
5
8
11
Rückwärts zählen
Mit einer negativen Schrittweite kann rückwärts gezählt werden.
for i in range(5, 0, -1):
print(i)
Ausgabe:
5
4
3
2
1
Die 0 wird nicht ausgegeben, weil auch beim Rückwärtszählen der Endwert ausgeschlossen ist.
Ein Countdown bis einschließlich 0 kann so geschrieben werden:
for i in range(10, -1, -1):
print(i)
Ausgabe:
10
9
8
7
6
5
4
3
2
1
0
Typischer Fehler bei range
Schleifenvariable und Ausgabe vermischen
Beispiel:
for i in range(2, 11, 3):
print(i + 1)
Zuerst werden die Werte von i bestimmt:
i = 2, 5, 8
Erst danach wird i + 1 berechnet:
2 + 1 = 3
5 + 1 = 6
8 + 1 = 9
Ausgabe:
3
6
9
Die Werte aus range(...) und die gedruckten Werte müssen getrennt betrachtet werden.
Die while-Schleife
Eine while-Schleife wird verwendet, wenn eine Wiederholung von einer Bedingung abhängt.
Sie läuft solange, wie ihre Bedingung True ist.
Beispiel
zahl = 1
while zahl <= 5:
print(zahl)
zahl += 1
Ausgabe:
1
2
3
4
5
Der Ablauf:
zahl = 1
1 <= 5 → True
Ausgabe 1
zahl wird 2
zahl = 2
2 <= 5 → True
Ausgabe 2
zahl wird 3
...
zahl = 6
6 <= 5 → False
Schleife endet
Ablauf einer while-Schleife
Eine while-Schleife arbeitet nach diesem Ablauf:
1. Bedingung prüfen
2. Falls True: gesamten Schleifenblock ausführen
3. Zur Bedingung zurückkehren
4. Bedingung erneut prüfen
5. Bei False endet die Schleife
Wichtig
Die Bedingung wird nur vor jedem Durchlauf geprüft.
Sie wird nicht nach jeder einzelnen Zeile innerhalb des Schleifenblocks erneut geprüft.
Warum kann ein Wert außerhalb der Bedingung ausgegeben werden?
Beispiel:
zahl = 1
while zahl <= 4:
zahl += 1
print(zahl)
Ausgabe:
2
3
4
5
Warum wird die 5 ausgegeben, obwohl 5 <= 4 falsch ist?
Der letzte Durchlauf beginnt mit:
zahl = 4
Die Bedingung wird geprüft:
4 <= 4 → True
Deshalb darf Python den Schleifenblock betreten.
Innerhalb des Blocks:
zahl += 1
Die Zahl wird zu 5.
Danach:
print(zahl)
Die 5 wird ausgegeben.
Erst nach dem vollständigen Schleifenblock kehrt Python zur Bedingung zurück:
5 <= 4 → False
Jetzt endet die Schleife.
Merksatz
Die
while-Bedingung wird vor dem Durchlauf geprüft, nicht dauerhaft während des Schleifenblocks.
Reihenfolge innerhalb des Schleifenblocks
Die Reihenfolge der Anweisungen ist entscheidend.
Erst ausgeben, dann erhöhen
zahl = 1
while zahl <= 4:
print(zahl)
zahl += 1
Ausgabe:
1
2
3
4
Erst erhöhen, dann ausgeben
zahl = 1
while zahl <= 4:
zahl += 1
print(zahl)
Ausgabe:
2
3
4
5
Die Schleife besitzt dieselbe Bedingung, aber die Reihenfolge im Block verändert die Ausgabe.
Endlosschleifen
Eine Endlosschleife endet niemals.
Fehlende Aktualisierung
zahl = 1
while zahl <= 3:
print(zahl)
Die Variable zahl bleibt immer 1.
Die Bedingung bleibt deshalb immer wahr:
1 <= 3 → True
Ausgabe:
1
1
1
1
...
Veränderung in die falsche Richtung
zahl = 5
while zahl > 0:
print(zahl)
zahl += 1
Die Zahl wird immer größer:
5
6
7
8
...
Die Bedingung zahl > 0 wird niemals False.
Merksatz
Eine Schleifenvariable muss sich so verändern, dass die Bedingung irgendwann
Falsewird.
Eine Veränderung allein genügt nicht. Sie muss in die richtige Richtung erfolgen.
break
break beendet eine Schleife sofort vollständig.
for i in range(1, 7):
if i == 4:
break
print(i)
Ausgabe:
1
2
3
Bei i == 4 wird break ausgeführt.
Die 4 wird nicht ausgegeben, weil break vor print(i) steht.
Auch die Werte 5 und 6 werden nicht mehr verarbeitet.
Merksatz
breakbeendet die gesamte Schleife.
continue
continue überspringt nur den aktuellen Durchlauf.
Danach läuft die Schleife mit dem nächsten Durchlauf weiter.
for i in range(1, 7):
if i == 4:
continue
print(i)
Ausgabe:
1
2
3
5
6
Die 4 wird übersprungen.
Die Schleife wird danach mit 5 fortgesetzt.
Merksatz
continueüberspringt den restlichen aktuellen Durchlauf.
continue und Endlosschleifen
Bei einer while-Schleife kann continue eine Endlosschleife verursachen.
Fehlerhaftes Beispiel
zahl = 1
while zahl <= 5:
if zahl == 3:
continue
print(zahl)
zahl += 1
Ablauf:
zahl = 1 → Ausgabe 1 → zahl wird 2
zahl = 2 → Ausgabe 2 → zahl wird 3
zahl = 3 → continue
Bei zahl == 3 überspringt continue den restlichen Block.
Dadurch wird diese Zeile nicht mehr erreicht:
zahl += 1
Die Zahl bleibt für immer 3.
3 <= 5 → True
continue
3 <= 5 → True
continue
...
Ausgabe:
1
2
Danach läuft die Schleife endlos ohne weitere Ausgabe.
Sichereres Beispiel
zahl = 1
while zahl <= 5:
zahl += 1
if zahl == 3:
continue
print(zahl)
Hier wird zahl bereits vor continue verändert.
Die Schleife bleibt deshalb nicht bei 3 hängen.
Ausgabe:
2
4
5
6
Merksatz
Wird die Aktualisierung der Schleifenvariable durch
continueübersprungen, kann eine Endlosschleife entstehen.
Modulo %
Der Modulo-Operator % liefert den Rest einer Division.
Beispiele:
4 % 2 = 0
5 % 2 = 1
9 % 3 = 0
10 % 3 = 1
Gerade Zahlen erkennen
Eine gerade Zahl besitzt bei der Division durch 2 keinen Rest.
if zahl % 2 == 0:
print("gerade")
Ungerade Zahlen erkennen
if zahl % 2 != 0:
print("ungerade")
Beispiel mit einer Schleife
for i in range(1, 8):
if i % 2 == 0:
print(i)
Ausgabe:
2
4
6
Unterschied zwischen for und while
for
Eine for-Schleife wird meistens verwendet, wenn:
- die Anzahl der Durchläufe bekannt ist,
- eine feste Zahlenfolge durchlaufen wird,
- jedes Element einer Liste verarbeitet werden soll.
Beispiele:
for i in range(10):
print(i)
for name in namen:
print(name)
while
Eine while-Schleife wird meistens verwendet, wenn:
- die Anzahl der Durchläufe vorher unbekannt ist,
- die Wiederholung von einer Bedingung abhängt,
- auf eine bestimmte Eingabe oder einen Zustand gewartet wird.
Beispiel:
passwort = ""
while passwort != "geheim":
passwort = input("Passwort: ")
Merksatz
forverwendet man meistens, wenn Werte, Elemente oder Durchlaufzahl vorher feststehen.
whileverwendet man meistens, wenn etwas solange wiederholt werden soll, wie eine Bedingung wahr ist.
Beispiele für for und while
Zahlen von 1 bis 100
for zahl in range(1, 101):
print(zahl)
Hier ist for passend, weil Start, Ende und Werte feststehen.
Passwort abfragen
passwort = ""
while passwort != "geheim":
passwort = input("Passwort eingeben: ")
Hier ist while passend, weil unbekannt ist, wie viele Versuche benötigt werden.
Liste durchlaufen
produkte = ["Laptop", "Maus", "Tastatur"]
for produkt in produkte:
print(produkt)
Countdown
for zahl in range(10, 0, -1):
print(zahl)
Spiel mit Lebenspunkten
while lebenspunkte > 0:
spielrunde()
Typische IHK-Fallen
Falle 1: Der Endwert von range wird mitgezählt
Falsch:
range(1, 5) → 1, 2, 3, 4, 5
Richtig:
range(1, 5) → 1, 2, 3, 4
Der Endwert ist ausgeschlossen.
Falle 2: Nur der erste Durchlauf wird berechnet
Eine Schleife führt den Block für jeden Wert aus.
Bei:
for i in range(3, 7):
print(i * 2)
müssen alle Werte verwendet werden:
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
Ausgabe:
6
8
10
12
Falle 3: Der letzte Durchlauf wird vergessen
Bei:
for i in range(3, 6):
print(i + 4)
sind die Werte:
i = 3, 4, 5
Ausgabe:
7
8
9
Die 5 gehört noch zur Schleife, obwohl der Endwert 6 ausgeschlossen ist.
Falle 4: i und print(i ...) werden vermischt
Immer zuerst:
i = ...
aufschreiben.
Danach erst:
Ausgabe = ...
berechnen.
Falle 5: Die while-Bedingung wird als dauerhafte Überwachung verstanden
Python prüft die Bedingung nur vor jedem Durchlauf.
Hat der Block begonnen, wird er vollständig ausgeführt, außer eine Anweisung wie break, continue, return oder ein Fehler unterbricht ihn.
Falle 6: Ein Wert außerhalb der Bedingung wird noch ausgegeben
zahl = 1
while zahl <= 4:
zahl += 1
print(zahl)
Die 5 wird noch ausgegeben, weil der letzte Durchlauf mit zahl = 4 beginnt.
Falle 7: break und continue werden verwechselt
break → gesamte Schleife beenden
continue → nur aktuellen Durchlauf überspringen
Falle 8: continue überspringt die Aktualisierung
while zahl <= 5:
if zahl == 3:
continue
zahl += 1
Bei zahl == 3 wird zahl += 1 nicht mehr erreicht.
Dadurch entsteht eine Endlosschleife.
Prüfungsrelevanz
Schleifen gehören zu den wichtigsten Grundlagen für die IHK-Prüfung.
Sie werden benötigt für:
- Algorithmen,
- Verarbeitung von Listen,
- Suche und Filterung,
- Summen und Zähler,
- Datenverarbeitung,
- Eingabeprüfungen,
- Pseudocode,
- Programmablaufpläne,
- Codeanalyse,
- Fehlersuche,
- Erkennung von Endlosschleifen.
In Prüfungsaufgaben muss häufig bestimmt werden:
- welche Werte ausgegeben werden,
- wie oft eine Schleife läuft,
- wann sie endet,
- ob eine Endlosschleife entsteht,
- welche Werte übersprungen werden,
- was
breakodercontinuebewirken.
Vorgehen bei Prüfungsaufgaben
Bei for
1. Alle Werte aus range(...) aufschreiben
2. Endwert ausschließen
3. Schrittweite beachten
4. Jeden Wert in den Schleifenblock einsetzen
5. Ausgabe in der richtigen Reihenfolge notieren
Bei while
1. Aktuellen Wert der Variable notieren
2. Bedingung prüfen
3. Falls True: Block Zeile für Zeile ausführen
4. Änderungen der Variable notieren
5. Auf break oder continue achten
6. Zur Bedingung zurückkehren
7. Prüfen, ob die Bedingung irgendwann False wird
Wiederholungsfragen
- Was ist eine Schleife?
- Wann verwendet man eine
for-Schleife? - Wann verwendet man eine
while-Schleife? - Welche Werte erzeugt
range(5)? - Gehört der Endwert bei
rangedazu? - Was bedeutet die Schrittweite?
- Wie zählt man mit
rangerückwärts? - Was macht
break? - Was macht
continue? - Wie entsteht eine Endlosschleife?
- Warum kann ein Wert ausgegeben werden, obwohl er die
while-Bedingung nicht mehr erfüllt? - Wann wird die
while-Bedingung geprüft? - Warum kann
continuebeiwhilegefährlich sein? - Was liefert der Modulo-Operator
%? - Wie erkennt man gerade und ungerade Zahlen?
Merksätze
- Eine Schleife wiederholt den gesamten eingerückten Block.
rangebeginnt beim Startwert und endet vor dem Endwert.- Bei
range(ende)beginnt Python bei0. - Die Schrittweite bestimmt, wie stark sich der Wert verändert.
- Eine negative Schrittweite zählt rückwärts.
- Zuerst die Werte von
iaufschreiben, danach die Ausgabe berechnen. foreignet sich für bekannte Werte oder Durchlaufzahlen.whileläuft solange eine Bedingung wahr ist.- Die
while-Bedingung wird vor jedem Durchlauf geprüft. - Der begonnene Schleifenblock wird vollständig ausgeführt.
breakbeendet die gesamte Schleife.continueüberspringt den restlichen aktuellen Durchlauf.- Die Schleifenvariable muss sich so verändern, dass die Bedingung irgendwann
Falsewird. - Wird die Aktualisierung durch
continueübersprungen, kann eine Endlosschleife entstehen. zahl % 2 == 0bedeutet: Die Zahl ist gerade.zahl % 2 != 0bedeutet: Die Zahl ist ungerade.
Zusammenfassung
Schleifen führen einen Codeblock mehrfach aus.
Die for-Schleife wird meistens verwendet, wenn Werte oder Durchlaufzahlen vorher bekannt sind.
Die while-Schleife wird verwendet, wenn eine Wiederholung von einer Bedingung abhängt.
Mit range(...) können Zahlenfolgen mit Startwert, Endwert und Schrittweite erzeugt werden.
Der Endwert von range ist immer ausgeschlossen.
Die Reihenfolge innerhalb einer Schleife ist entscheidend. Besonders bei while muss beachtet werden, wann eine Variable verändert und wann die Bedingung geprüft wird.
break beendet eine Schleife vollständig.
continue überspringt nur den aktuellen Durchlauf.
Wird bei einer while-Schleife die Aktualisierung der Schleifenvariable vergessen oder übersprungen, kann eine Endlosschleife entstehen.
Schleifen sind ein zentraler Bestandteil von Algorithmen und deshalb für die IHK-Prüfung besonders wichtig.