Grundlagen G05 • Schulabgleich 09.1 & 09.2

Schleifen & Wiederholungen 🎡🔄

Lerne Zählschleifen (for), Bedingungsschleifen (while), Schleifen-Akkumulatoren und die Steuerbefehle break & continue kennen.

📂 Dateien dieser Einheit:
💻 In Web-IDE öffnen → 📄 aufgabe.py (Startercode) 🧪 test_aufgabe.py (Tests) 💡 musterloesung.py (Lösung) 📖 README.md

1. Die Grundidee: Warum brauchen wir Schleifen?

Computer sind unschlagbar schnell darin, monotone Aufgaben millionenfach zu wiederholen. Anstatt 100-mal denselben Befehl untereinander zu schreiben, sagen wir Python einfach: "Wiederhole diesen Code-Block X-mal!"

🎡 Die Karussell- & Riesenrad-Analogie:

Es gibt in Python zwei Hauptarten von Schleifen:

  • Zählschleife (for): Wie ein Karussell mit Wertmarken. Du kaufst 5 Runden. Der Automat zählt: 1, 2, 3, 4, 5 – und stoppt genau nach 5 Runden.
  • Bedingungsschleife (while): Wie ein Riesenrad, das sich dreht, SOLANGE die Musik spielt. Sobald die Musik stoppt (Bedingung wird False), hält das Rad an.

2. Zählschleifen: for und range()

Verwende for, wenn du im Voraus weißt, wie oft etwas wiederholt werden soll. Die Funktion range() erzeugt dafür die Zahlenfolge.

⚠️ Die goldene range()-Regel: Der Stop-Wert ist immer EXKLUSIV!
range(1, 5) läuft von 1 bis 4 (die Zahl 5 ist nicht dabei)!
Wenn du bis 5 zählen willst, musst du range(1, 6) schreiben.

Die 3 Varianten von range() im Überblick:

Aufruf Bedeutung Erzeugte Zahlen
range(5) Start bei 0 bis Stop-1 0, 1, 2, 3, 4
range(1, 6) Start bei 1 bis 6-1 1, 2, 3, 4, 5
range(0, 10, 2) Start bei 0, 2er-Schritte 0, 2, 4, 6, 8
range(5, 0, -1) Rückwärts (Countdown!) 5, 4, 3, 2, 1
Python (for-Schleife mit range)
# Countdown von 5 bis 1
for sekunde in range(5, 0, -1):
    print(f"Raketenstart in {sekunde}...")
print("🚀 Liftoff!")

3. Bedingungsschleifen: while

Verwende while, wenn du nicht weißt, wie viele Durchläufe nötig sind, sondern die Schleife laufen soll, solange eine Bedingung wahr (True) ist.

Python (while-Schleife)
energie = 3
while energie > 0:
    print(f"Roboter läuft... Energie: {energie}")
    energie -= 1  # ⚠️ Zähler anpassen, sonst Endlosschleife!

print("Akku leer! Bitte aufladen.")
🛑 Achtung vor der Endlosschleife (Infinite Loop)!

Wenn die Bedingung niemals False wird, stürzt dein Programm zwar nicht ab, aber es friert für immer ein! Verändere immer die Prüfvariable im Schleifenkörper.

Notausstieg im Terminal: Drücke Strg + C, um eine Endlosschleife sofort abzubrechen!

4. Schleifen-Steuerung: break & continue

Mit zwei speziellen Schlüsselwörtern hast du volle Kontrolle über den Schleifenablauf:

🛑

break (Notbremse)

Beendet die Schleife sofort und vollständig. Die Programmausführung springt direkt hinter die Schleife.

⏭️

continue (Nächste Runde)

Bricht nur die aktuelle Runde ab und springt sofort zum nächsten Schleifendurchlauf.

Python (break und continue im Einsatz)
# Beispiel: Nur ungerade Zahlen drucken, bei 7 abbrechen
for zahl in range(1, 11):
    if zahl % 2 == 0:
        continue  # Überspringe gerade Zahlen
    if zahl == 7:
        print("Glückszahl 7 gefunden -> Abbruch!")
        break     # Schleife komplett beenden
    print("Ungerade Zahl:", zahl)

# Ausgabe: 1, 3, 5, danach Abbruch!

5. Das Akkumulator-Muster 🧺

Ein Akkumulator (Sammelbehälter) ist eines der wichtigsten Entwurfsmuster der Informatik. Er sammelt während der Schleife Werte an:

Python (Die 3 klassischen Akkumulatoren)
# 1. Summen-Akkumulator (Startwert: 0)
summe = 0
for x in [10, 20, 30]:
    summe += x     # summe = summe + x
print("Gesamtsumme:", summe)  # 60

# 2. Zähler-Akkumulator (Startwert: 0)
anzahl = 0
for x in range(1, 11):
    if x % 2 == 0:
        anzahl += 1
print("Anzahl gerade Zahlen:", anzahl)  # 5

# 3. Produkt-Akkumulator (Startwert: 1, NIEMALS 0!)
produkt = 1
for x in range(1, 5):
    produkt *= x   # 1 * 2 * 3 * 4
print("Produkt (4!):", produkt)  # 24
💡 Goldene Akkumulator-Regel:
Definiere die Akkumulator-Variable (summe = 0 oder produkt = 1) immer VOR der Schleife! Wenn du sie in der Schleife definierst, wird der Wert bei jedem Durchlauf wieder auf 0 bzw. 1 zurückgesetzt.

6. 🎯 Deine Aufgaben in aufgabe.py

Öffne die Datei aufgabe.py und bearbeite die folgenden 5 Funktionen:

💡 Lösungshinweise (Aufklappen bei Bedarf)

🔍 Tipp zu TODO 1 & 2 (Summe & Fakultät)
def summe_bis(n: int) -> int:
    if n <= 0:
        return 0
    summe = 0
    for i in range(1, n + 1):
        summe += i
    return summe
🔍 Tipp zu TODO 4 (Primzahl-Test mit Schleife)
def ist_primzahl(n: int) -> bool:
    if n <= 1:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False  # Teiler gefunden -> keine Primzahl!
    return True           # Kein Teiler gefunden -> Primzahl!
🔍 Tipp zu TODO 5 (Quersumme mit while-Schleife)
def quorsumme(n: int) -> int:
    rest = abs(n)
    summe = 0
    while rest > 0:
        summe += rest % 10    # Letzte Ziffer addieren
        rest = rest // 10     # Letzte Ziffer abschneiden
    return summe

7. 🧪 Testen & Weitergehen

Führe im Terminal den Unittest aus:

Terminal
python3 test_aufgabe.py