DE EN

Schleifen

for und while — Wiederholungen meistern mit List Comprehensions und Python-Idiomen.

60 Min Mittel

Lernziele dieses Kapitels

  • Du nutzt for-Schleifen mit range() für gezielte Wiederholungen
  • Du steuerst while-Schleifen mit Abbruchbedingungen und vermeidest Endlosschleifen
  • Du nutzt break, continue und enumerate() für elegante Iteration
  • Du baust PyBuddy's interaktives Menü

Die for-Schleife

Die for-Schleife ist die häufigste Wiederholung in Python. Sie durchläuft jedes Element einer Sequenz — sei es eine Liste, ein String oder ein range()-Objekt.

range(start, stop, step) erzeugt Zahlenfolgen. Wichtig: Der stop-Wert ist exklusiv!

Python
# for-Schleife mit range()
for i in range(1, 6):
    print(f"Runde {i}")

# Mit Schrittweite
for i in range(0, 11, 2):
    print(f"Gerade Zahl: {i}")

# Strings durchlaufen
for buchstabe in "Python":
    print(buchstabe.upper())
Ausgabe
Runde 1 Runde 2 Runde 3 Runde 4 Runde 5 Gerade Zahl: 0 Gerade Zahl: 2 ... P Y T H O N
Python vs. JavaScript — Das kennst du schon!

Du kennst bereits JavaScript aus dem JS-Quest. Hier ist der direkte Vergleich:

Python
for i in range(1, 6):
    print(i)
JavaScript
for (let i = 1; i < 6; i++) {
    console.log(i);
}
Merke: Python: range(1, 6) gibt 1-5. JavaScript: i < 6 gibt auch 1-5. Python's for ist intuitiver, JS braucht die klassische C-Syntax.

Die while-Schleife

while wiederholt Code, solange eine Bedingung True ist. Sie ist perfekt, wenn du nicht weißt, wie oft etwas wiederholt werden muss — z.B. bis der Nutzer 'exit' eingibt.

Achtung

Vergiss nie die Abbruchbedingung, sonst läuft die Schleife ewig — das nennt man Endlosschleife!

Python
# while-Schleife: Countdown
countdown = 3
while countdown > 0:
    print(f"Start in {countdown}...")
    countdown -= 1
print(" Los!")

# Nutzer-Eingabe bis 'exit'
befehl = ""
while befehl != "exit":
    befehl = input("Befehl (exit zum Beenden): ").lower()
    if befehl != "exit":
        print(f"Ausführung: {befehl}")
print(" Programm beendet.")
Ausgabe
Start in 3... Start in 2... Start in 1... Los! Befehl (exit zum Beenden): hallo Ausführung: hallo Befehl (exit zum Beenden): exit Programm beendet.
Python vs. JavaScript — Das kennst du schon!

Du kennst bereits JavaScript aus dem JS-Quest. Hier ist der direkte Vergleich:

Python
while befehl != "exit":
    befehl = input("> ")
JavaScript
while (befehl !== "exit") {
    befehl = prompt("> ");
}
Merke: Die Logik ist identisch! Python nutzt input() im Terminal, JavaScript prompt() als Popup.

break & continue

Manchmal willst du eine Schleife vorzeitig abbrechen oder einen Durchlauf überspringen. Dafür gibt es break und continue:

  • break — beendet die Schleife sofort
  • continue — überspringt den Rest des aktuellen Durchlaufs
Python
# break: Schleife vorzeitig beenden
for i in range(1, 11):
    if i == 5:
        print(" Abbruch bei 5!")
        break
    print(i)

# continue: Überspringen
for i in range(1, 6):
    if i == 3:
        print("⏭️  Überspringe 3")
        continue
    print(f"Verarbeite {i}")
Ausgabe
1 2 3 4 Abbruch bei 5! 1 2 ⏭️ Überspringe 3 4 5
Python vs. JavaScript — Das kennst du schon!

Du kennst bereits JavaScript aus dem JS-Quest. Hier ist der direkte Vergleich:

Python
if i == 5:
    break
if i == 3:
    continue
JavaScript
if (i === 5) { break; }
if (i === 3) { continue; }
Merke: break und continue funktionieren in Python und JavaScript exakt gleich!

enumerate() & zip()

enumerate() liefert bei einer Iteration gleichzeitig den Index und den Wert — super praktisch! zip() kombiniert zwei Listen Element für Element.

Python
# enumerate: Index + Wert
aufgaben = ["Python lernen", "Übung machen", "Projekt bauen"]
for index, aufgabe in enumerate(aufgaben, start=1):
    print(f"{index}. {aufgabe}")

# zip: Listen kombinieren
namen = ["Anna", "Ben", "Clara"]
punkte = [95, 87, 92]
for name, punkt in zip(namen, punkte):
    print(f"{name}: {punkt} Punkte")
Ausgabe
1. Python lernen 2. Übung machen 3. Projekt bauen Anna: 95 Punkte Ben: 87 Punkte Clara: 92 Punkte

List Comprehensions

List Comprehensions sind Pythons Superpower: Du erstellst eine neue Liste in einer einzigen Zeile. Sie ist schneller und lesbarer als eine klassische for-Schleife.

Pro Tipp

List Comprehensions können auch Bedingungen enthalten: [x for x in liste if x > 0] filtert automatisch.

Python
# Klassisch vs. Comprehension
zahlen = [1, 2, 3, 4, 5]

# Klassisch
quadrate_alt = []
for z in zahlen:
    quadrate_alt.append(z ** 2)

# Comprehension (eine Zeile!)
quadrate_neu = [z ** 2 for z in zahlen]
print(quadrate_neu)  # [1, 4, 9, 16, 25]

# Mit Bedingung: nur gerade Zahlen
gerade = [z for z in zahlen if z % 2 == 0]
print(gerade)  # [2, 4]

# Strings transformieren
woerter = ["python", "ist", "cool"]
gross = [w.upper() for w in woerter]
print(gross)  # ['PYTHON', 'IST', 'COOL']
Ausgabe
[1, 4, 9, 16, 25] [2, 4] ['PYTHON', 'IST', 'COOL']

Warm-Up: Multiplikationstabelle

Schreibe ein Programm, das eine Zahl einliest und die Multiplikationstabelle von 1-10 ausgibt.

Hinweis: z = int(input("Zahl: ")) for i in range(1, 11): print(f"{i} x {z} = {i * z}")

Lösung
z = int(input("Zahl: "))
for i in range(1, 11):
    print(f"{i} x {z} = {i * z}")

Challenge: Zahlenraten

Programmiere ein Zahlenraten-Spiel! Der Computer wählt eine Zahl 1-100. Der Spieler tippt, bis er die Zahl errät. Nach jedem Tipp kommt 'zu hoch' oder 'zu niedrig'.

Hinweis: import random ziel = random.randint(1, 100) versuche = 0 while True: tipp = int(input("Dein Tipp: ")) versuche += 1 if tipp < ziel: print("Zu niedrig!") elif tipp > ziel: print("Zu hoch!") else: print(f" Richtig! {versuche} Versuche.") break

Lösung
import random
ziel = random.randint(1, 100)
versuche = 0

while True:
    tipp = int(input("Dein Tipp: "))
    versuche += 1
    if tipp < ziel:
        print("Zu niedrig!")
    elif tipp > ziel:
        print("Zu hoch!")
    else:
        print(f" Richtig! {versuche} Versuche.")
        break

PyBuddy-Checkpoint: Menü-Loop

PyBuddy zeigt ein interaktives Menü und wiederholt, bis der Nutzer 'exit' eingibt. Nutze while und if-elif.

Hinweis: # pybuddy/main.py print(" PyBuddy ist bereit!") while True: cmd = input("\n[Befehl: hallo, zeit, exit] ").lower() if cmd == "exit": print(" Bis bald!") break elif cmd == "hallo": print(" Hallo! Wie geht es dir?") elif cmd == "zeit": import datetime print(f"🕒 {datetime.datetime.now().strftime('%H:%M')}") else: print("❓ Unbekannter Befehl.")

Lösung
# pybuddy/main.py
print(" PyBuddy ist bereit!")

while True:
    cmd = input("\n[Befehl: hallo, zeit, exit] ").lower()
    if cmd == "exit":
        print(" Bis bald!")
        break
    elif cmd == "hallo":
        print(" Hallo! Wie geht es dir?")
    elif cmd == "zeit":
        import datetime
        print(f"🕒 {datetime.datetime.now().strftime('%H:%M')}")
    else:
        print("❓ Unbekannter Befehl.")
Didaktische Pause

In Tetris läuft eine Endlosschleife, die ständig prüft: Gibt es eine vollständige Reihe? Wenn ja → lösche sie, aktualisiere Punkte, beschleunige das Spiel. Genau das machst du mit while und if — nur mit mehr Grafik!

Zusammenfassung

  • for → Element für Element durchlaufen
  • while → solange Bedingung True
  • break / continue für Flusssteuerung
  • enumerate() und zip() für elegante Iteration
  • List Comprehensions: [x*2 for x in liste]