Zum Inhalt springen
Python Anfänger 2 min

for-Schleifen in Python

Lerne, wie du mit for-Schleifen ueber Listen, Strings und Bereiche iterierst. Von range() bis enumerate() und zip().

Aktualisiert:

for-Schleife Grundlagen

Die for-Schleife in Python ist anders als in vielen anderen Sprachen. Sie iteriert ueber die Elemente einer Sequenz (Liste, String, Bereich, etc.):

fruechte = ["Apfel", "Banane", "Kirsche"]

for frucht in fruechte:
    print(frucht)

Ausgabe:

Apfel
Banane
Kirsche

Die Grundstruktur lautet:

for variable in iterable:
    # Code, der fuer jedes Element ausgefuehrt wird
    pass
  • variable nimmt bei jedem Durchlauf den Wert des naechsten Elements an.
  • iterable ist alles, was man “durchlaufen” kann (Liste, String, range, etc.).
  • Der eingerueckte Block wird fuer jedes Element einmal ausgefuehrt.

Die range() Funktion

range() erzeugt eine Zahlenfolge — perfekt zum Zaehlen:

range(n) — Von 0 bis n-1

for i in range(5):
    print(i)

Ausgabe:

0
1
2
3
4

Beachte: range(5) erzeugt die Zahlen 0, 1, 2, 3, 4 — also 5 Zahlen, aber die 5 selbst ist nicht enthalten!

range(start, stop) — Von start bis stop-1

for i in range(3, 8):
    print(i)

Ausgabe:

3
4
5
6
7

range(start, stop, step) — Mit Schrittweite

# Jede zweite Zahl
for i in range(0, 10, 2):
    print(i, end=" ")
print()  # 0 2 4 6 8

# Rueckwaerts zaehlen
for i in range(10, 0, -1):
    print(i, end=" ")
print()  # 10 9 8 7 6 5 4 3 2 1

# Countdown
for i in range(5, 0, -1):
    print(f"{i}...")
print("Start!")

Ausgabe des Countdowns:

5...
4...
3...
2...
1...
Start!

Ueber Strings iterieren

Strings sind Sequenzen von Zeichen. Du kannst ueber jeden Buchstaben iterieren:

wort = "Python"

for buchstabe in wort:
    print(buchstabe, end=" ")

Ausgabe:

P y t h o n

Beispiel: Vokale zaehlen

text = "Programmieren lernen macht Spass"
vokale = "aeiouAEIOU"
anzahl = 0

for zeichen in text:
    if zeichen in vokale:
        anzahl += 1

print(f"Der Text enthaelt {anzahl} Vokale.")

Ausgabe:

Der Text enthaelt 10 Vokale.

Ueber Listen iterieren

Listen sind die haeufigsten Iterables:

noten = [1.3, 2.7, 1.0, 3.3, 2.0]

summe = 0
for note in noten:
    summe += note

durchschnitt = summe / len(noten)
print(f"Durchschnittsnote: {durchschnitt:.2f}")

Ausgabe:

Durchschnittsnote: 2.06

Ueber ein Dictionary iterieren

hauptstaedte = {
    "Deutschland": "Berlin",
    "Frankreich": "Paris",
    "Italien": "Rom"
}

# Ueber Schluessel iterieren
for land in hauptstaedte:
    print(land)

# Ueber Schluessel und Werte iterieren
for land, stadt in hauptstaedte.items():
    print(f"Die Hauptstadt von {land} ist {stadt}.")

# Nur ueber Werte iterieren
for stadt in hauptstaedte.values():
    print(stadt)

enumerate() — Index und Wert gleichzeitig

Manchmal brauchst du den Index und den Wert gleichzeitig. Dafuer gibt es enumerate():

fruechte = ["Apfel", "Banane", "Kirsche", "Dattel"]

for index, frucht in enumerate(fruechte):
    print(f"{index}: {frucht}")

Ausgabe:

0: Apfel
1: Banane
2: Kirsche
3: Dattel

Startindex festlegen

teilnehmer = ["Anna", "Bob", "Clara"]

for nummer, name in enumerate(teilnehmer, start=1):
    print(f"Platz {nummer}: {name}")

Ausgabe:

Platz 1: Anna
Platz 2: Bob
Platz 3: Clara

Warum enumerate() statt range(len())?

farben = ["rot", "gruen", "blau"]

# UMSTAENDLICH:
for i in range(len(farben)):
    print(f"{i}: {farben[i]}")

# BESSER (pythonisch):
for i, farbe in enumerate(farben):
    print(f"{i}: {farbe}")

Beide liefern dasselbe Ergebnis, aber enumerate() ist lesbarer und eleganter.


zip() — Parallele Iteration

Mit zip() iterierst du ueber mehrere Sequenzen gleichzeitig:

namen = ["Anna", "Bob", "Clara"]
alter = [25, 30, 22]

for name, a in zip(namen, alter):
    print(f"{name} ist {a} Jahre alt.")

Ausgabe:

Anna ist 25 Jahre alt.
Bob ist 30 Jahre alt.
Clara ist 22 Jahre alt.

zip() mit drei Listen

namen = ["Anna", "Bob", "Clara"]
faecher = ["Mathe", "Physik", "Informatik"]
noten = [1.3, 2.0, 1.7]

for name, fach, note in zip(namen, faecher, noten):
    print(f"{name}: {fach} = {note}")

Ausgabe:

Anna: Mathe = 1.3
Bob: Physik = 2.0
Clara: Informatik = 1.7

zip() stoppt beim kuerzesten Iterable

a = [1, 2, 3, 4, 5]
b = ["a", "b", "c"]

for x, y in zip(a, b):
    print(x, y)
# Nur 3 Durchlaeufe -- zip stoppt bei der kuerzeren Liste

Ausgabe:

1 a
2 b
3 c

break und continue

break — Schleife vorzeitig beenden

# Suche die erste negative Zahl
zahlen = [5, 3, 8, -2, 7, -4]

for zahl in zahlen:
    if zahl < 0:
        print(f"Erste negative Zahl gefunden: {zahl}")
        break
    print(f"{zahl} ist positiv.")

Ausgabe:

5 ist positiv.
3 ist positiv.
8 ist positiv.
Erste negative Zahl gefunden: -2

continue — Aktuellen Durchlauf ueberspringen

# Nur positive Zahlen ausgeben
zahlen = [5, -3, 8, -2, 7, -4]

for zahl in zahlen:
    if zahl < 0:
        continue  # Rest ueberspringen, naechster Durchlauf
    print(zahl)

Ausgabe:

5
8
7

break in verschachtelten Schleifen

break beendet nur die innerste Schleife:

for i in range(3):
    for j in range(3):
        if j == 2:
            break  # Beendet nur die innere Schleife
        print(f"i={i}, j={j}")
    print(f"--- Innere Schleife bei i={i} beendet ---")

Die else-Klausel bei for-Schleifen

Python hat eine besondere Funktion: for...else. Der else-Block wird ausgefuehrt, wenn die Schleife ohne break durchgelaufen ist:

# Pruefe, ob eine Zahl eine Primzahl ist
zahl = 17

for i in range(2, zahl):
    if zahl % i == 0:
        print(f"{zahl} ist keine Primzahl (teilbar durch {i}).")
        break
else:
    print(f"{zahl} ist eine Primzahl!")

Ausgabe:

17 ist eine Primzahl!
# Suche nach einem Element
namen = ["Anna", "Bob", "Clara"]
gesucht = "David"

for name in namen:
    if name == gesucht:
        print(f"{gesucht} gefunden!")
        break
else:
    print(f"{gesucht} nicht in der Liste.")

Ausgabe:

David nicht in der Liste.

Verschachtelte Schleifen

Du kannst Schleifen ineinander verschachteln:

for i in range(1, 4):
    for j in range(1, 4):
        print(f"({i},{j})", end=" ")
    print()  # Neue Zeile nach jeder inneren Schleife

Ausgabe:

(1,1) (1,2) (1,3)
(2,1) (2,2) (2,3)
(3,1) (3,2) (3,3)

Praxis: Multiplikationstabelle

# Multiplikationstabelle 1 bis 10
print("Multiplikationstabelle:")
print("-" * 55)

# Kopfzeile
print("     ", end="")
for j in range(1, 11):
    print(f"{j:5d}", end="")
print()
print("-" * 55)

# Tabelle
for i in range(1, 11):
    print(f"{i:3d} |", end="")
    for j in range(1, 11):
        print(f"{i*j:5d}", end="")
    print()

Ausgabe (gekuerzt):

Multiplikationstabelle:
-------------------------------------------------------
         1    2    3    4    5    6    7    8    9   10
-------------------------------------------------------
  1 |    1    2    3    4    5    6    7    8    9   10
  2 |    2    4    6    8   10   12   14   16   18   20
  3 |    3    6    9   12   15   18   21   24   27   30
...

Praxis: Sternmuster drucken

# Dreieck
hoehe = 5

for i in range(1, hoehe + 1):
    print("*" * i)

Ausgabe:

*
**
***
****
*****
# Zentriertes Dreieck (Pyramide)
hoehe = 5

for i in range(1, hoehe + 1):
    leerzeichen = " " * (hoehe - i)
    sterne = "*" * (2 * i - 1)
    print(leerzeichen + sterne)

Ausgabe:

    *
   ***
  *****
 *******
*********
# Raute
hoehe = 5

# Obere Haelfte
for i in range(1, hoehe + 1):
    leerzeichen = " " * (hoehe - i)
    sterne = "*" * (2 * i - 1)
    print(leerzeichen + sterne)

# Untere Haelfte
for i in range(hoehe - 1, 0, -1):
    leerzeichen = " " * (hoehe - i)
    sterne = "*" * (2 * i - 1)
    print(leerzeichen + sterne)

Uebungen

Uebung 1: Summe von 1 bis n

Schreibe ein Programm, das die Summe aller Zahlen von 1 bis n berechnet (n wird vom Benutzer eingegeben).

Loesung anzeigen
n = int(input("Gib eine Zahl ein: "))
summe = 0

for i in range(1, n + 1):
    summe += i

print(f"Die Summe von 1 bis {n} ist {summe}.")
# Bonus: Direkt mit sum()
print(f"Kontrolle: {sum(range(1, n + 1))}")

Uebung 2: FizzBuzz

Gib die Zahlen von 1 bis 30 aus. Wenn die Zahl durch 3 teilbar ist, gib “Fizz” aus. Wenn durch 5 teilbar, “Buzz”. Wenn durch beide teilbar, “FizzBuzz”.

Loesung anzeigen
for i in range(1, 31):
    if i % 3 == 0 and i % 5 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)

Uebung 3: Umgekehrter String

Schreibe ein Programm, das einen String Zeichen fuer Zeichen umkehrt (ohne [::-1] zu verwenden).

Loesung anzeigen
text = input("Gib einen Text ein: ")
umgekehrt = ""

for zeichen in text:
    umgekehrt = zeichen + umgekehrt

print(f"Umgekehrt: {umgekehrt}")

Uebung 4: Haeufigste Buchstaben

Schreibe ein Programm, das zaehlt, wie oft jeder Buchstabe in einem Text vorkommt.

Loesung anzeigen
text = input("Gib einen Text ein: ").lower()
buchstaben = {}

for zeichen in text:
    if zeichen.isalpha():
        if zeichen in buchstaben:
            buchstaben[zeichen] += 1
        else:
            buchstaben[zeichen] = 1

# Sortiert nach Haeufigkeit ausgeben
for buchstabe, anzahl in sorted(buchstaben.items(), key=lambda x: x[1], reverse=True):
    print(f"'{buchstabe}': {anzahl}x")

Pro-Tipp: Vermeide range(len()) — es gibt fast immer einen besseren Weg!

farben = ["rot", "gruen", "blau"]

# NICHT pythonisch:
for i in range(len(farben)):
    print(farben[i])

# Pythonisch -- direkt iterieren:
for farbe in farben:
    print(farbe)

# Wenn du den Index brauchst -- enumerate():
for i, farbe in enumerate(farben):
    print(f"{i}: {farbe}")

# Fuer zwei Listen -- zip():
codes = ["#FF0000", "#00FF00", "#0000FF"]
for farbe, code in zip(farben, codes):
    print(f"{farbe}: {code}")

Dieses Prinzip heisst “Pythonic Code” — Python bietet elegante Werkzeuge, nutze sie!

Zurück zum Python Kurs