11 minute read

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:

  • for
  • while

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 bei 0 und endet bei 4.


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 False wird.

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

break beendet 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

for verwendet man meistens, wenn Werte, Elemente oder Durchlaufzahl vorher feststehen.

while verwendet 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 break oder continue bewirken.

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 range dazu?
  • Was bedeutet die Schrittweite?
  • Wie zählt man mit range rü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 continue bei while gefährlich sein?
  • Was liefert der Modulo-Operator %?
  • Wie erkennt man gerade und ungerade Zahlen?

Merksätze

  • Eine Schleife wiederholt den gesamten eingerückten Block.
  • range beginnt beim Startwert und endet vor dem Endwert.
  • Bei range(ende) beginnt Python bei 0.
  • Die Schrittweite bestimmt, wie stark sich der Wert verändert.
  • Eine negative Schrittweite zählt rückwärts.
  • Zuerst die Werte von i aufschreiben, danach die Ausgabe berechnen.
  • for eignet sich für bekannte Werte oder Durchlaufzahlen.
  • while läuft solange eine Bedingung wahr ist.
  • Die while-Bedingung wird vor jedem Durchlauf geprüft.
  • Der begonnene Schleifenblock wird vollständig ausgeführt.
  • break beendet die gesamte Schleife.
  • continue überspringt den restlichen aktuellen Durchlauf.
  • Die Schleifenvariable muss sich so verändern, dass die Bedingung irgendwann False wird.
  • Wird die Aktualisierung durch continue übersprungen, kann eine Endlosschleife entstehen.
  • zahl % 2 == 0 bedeutet: Die Zahl ist gerade.
  • zahl % 2 != 0 bedeutet: 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.

Updated: