Skip to content

Lösungen: Teil 8 - Schleifen

Lösung 8.1: Einfache for-Schleife

python
def zahlen_bis_fuenf():
    """Erstellt eine Liste mit Zahlen von 1 bis 5."""
    zahlen = []
    for i in range(1, 6):
        zahlen.append(i)
    return zahlen

Alternative (List Comprehension):

python
def zahlen_bis_fuenf():
    """Erstellt eine Liste mit Zahlen von 1 bis 5."""
    return [i for i in range(1, 6)]

Alternative (direkt mit list und range):

python
def zahlen_bis_fuenf():
    """Erstellt eine Liste mit Zahlen von 1 bis 5."""
    return list(range(1, 6))

Erklärung: range(1, 6) erzeugt Zahlen von 1 bis 5 (6 ist exklusiv).


Lösung 8.2: Summe mit Schleife

python
def summe_bis_n(n):
    """Berechnet die Summe von 1 bis n."""
    summe = 0
    for i in range(1, n + 1):
        summe = summe + i
    return summe

Alternative (kürzer):

python
def summe_bis_n(n):
    """Berechnet die Summe von 1 bis n."""
    summe = 0
    for i in range(1, n + 1):
        summe += i
    return summe

Erklärung:

  • summe = 0 ist der Akkumulator (Startwert)
  • In jeder Iteration wird der aktuelle Wert i zur Summe addiert
  • summe += i ist Kurzform für summe = summe + i

Beispiel für n=5:

  • Iteration 1: summe = 0 + 1 = 1
  • Iteration 2: summe = 1 + 2 = 3
  • Iteration 3: summe = 3 + 3 = 6
  • Iteration 4: summe = 6 + 4 = 10
  • Iteration 5: summe = 10 + 5 = 15

Lösung 8.3: Gerade Zahlen zählen

python
def gerade_zaehlen(zahlen):
    """Zählt gerade Zahlen in einer Liste."""
    anzahl = 0
    for zahl in zahlen:
        if zahl % 2 == 0:
            anzahl += 1
    return anzahl

Erklärung:

  • Der Modulo-Operator % gibt den Rest zurück
  • zahl % 2 == 0 bedeutet: durch 2 teilbar (gerade)
  • Wir zählen mit anzahl += 1 jede gerade Zahl

Lösung 8.4: Code Reading

Antworten:

  1. Wie oft wird die Schleife durchlaufen?

    3 Mal (die Liste zahlen hat 3 Elemente: 10, 20, 30)

  2. Tabelle:

Iterationzahlsumme (vorher)summe (nachher)
110010
2201030
3303060
  1. Finaler Wert von summe:

    60

Detaillierte Erklärung:

python
summe = 0                    # summe = 0
zahlen = [10, 20, 30]

# Iteration 1:
zahl = 10                    # Erstes Element
summe = summe + zahl         # 0 + 10 = 10
print(f"Aktuelle Summe: {summe}")  # Ausgabe: Aktuelle Summe: 10

# Iteration 2:
zahl = 20                    # Zweites Element
summe = summe + zahl         # 10 + 20 = 30
print(f"Aktuelle Summe: {summe}")  # Ausgabe: Aktuelle Summe: 30

# Iteration 3:
zahl = 30                    # Drittes Element
summe = summe + zahl         # 30 + 30 = 60
print(f"Aktuelle Summe: {summe}")  # Ausgabe: Aktuelle Summe: 60

print(f"Gesamt-Summe: {summe}")    # Ausgabe: Gesamt-Summe: 60

Lösung 8.5: Debugging

Fehler: range(1, 10) geht nur bis 9, nicht bis 10. Die Zahl 9 fehlt in der Liste.

Problem:

python
for i in range(1, 10):  # range(1, 10) = [1, 2, 3, 4, 5, 6, 7, 8, 9]

Korrekte Lösung:

python
def ungerade_zahlen():
    """Sammelt ungerade Zahlen von 1 bis 10."""
    ungerade = []

    for i in range(1, 11):  # 11 statt 10, damit 10 inkludiert wird
        if i % 2 == 1:
            ungerade.append(i)

    return ungerade

# Test
print(ungerade_zahlen())  # Ausgabe: [1, 3, 5, 7, 9]

Erklärung:

  • range(start, stop) ist exklusiv bei stop (die obere Grenze wird nicht eingeschlossen)
  • range(1, 10) erzeugt 1, 2, 3, 4, 5, 6, 7, 8, 9 (ohne 10)
  • range(1, 11) erzeugt 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 (mit 10)

Alternative Lösung (nur ungerade Zahlen in range):

python
def ungerade_zahlen():
    """Sammelt ungerade Zahlen von 1 bis 10."""
    ungerade = []

    for i in range(1, 11, 2):  # Start 1, Stop 11, Step 2 (überspringt gerade Zahlen)
        ungerade.append(i)

    return ungerade

Bonus-Übungen

Lösung Bonus 3: Fakultät

python
def fakultaet(n):
    """Berechnet die Fakultät von n (n!)."""
    ergebnis = 1
    for i in range(1, n + 1):
        ergebnis *= i
    return ergebnis

Erklärung:

  • Fakultät: n! = n × (n-1) × ... × 2 × 1
  • Beispiel 5!: 1 × 2 × 3 × 4 × 5 = 120
  • Sonderfall: 0! = 1 (per Definition)

Lösung Bonus 4: Summe einer Liste

python
def summe_liste(zahlen):
    """Berechnet die Summe aller Zahlen in einer Liste."""
    summe = 0
    for zahl in zahlen:
        summe += zahl
    return summe

Erklärung: Wir iterieren über alle Elemente und addieren sie zur Summe.


Lösung Bonus 5: Durchschnitt berechnen

python
def durchschnitt(zahlen):
    """Berechnet den Durchschnitt einer Liste."""
    summe = 0
    for zahl in zahlen:
        summe += zahl
    return summe / len(zahlen)

Alternative (mit sum):

python
def durchschnitt(zahlen):
    """Berechnet den Durchschnitt einer Liste."""
    return sum(zahlen) / len(zahlen)

Erklärung: Durchschnitt = Summe aller Zahlen ÷ Anzahl der Zahlen


Lösung Bonus 6: Gerade Zahlen filtern

python
def gerade_zahlen(zahlen):
    """Filtert alle geraden Zahlen aus einer Liste."""
    ergebnis = []
    for zahl in zahlen:
        if zahl % 2 == 0:
            ergebnis.append(zahl)
    return ergebnis

Alternative (List Comprehension):

python
def gerade_zahlen(zahlen):
    """Filtert alle geraden Zahlen aus einer Liste."""
    return [zahl for zahl in zahlen if zahl % 2 == 0]

Erklärung: Wir prüfen jede Zahl mit % 2 == 0 und fügen nur gerade Zahlen der Ergebnis-Liste hinzu.


Lösung Bonus 10: Liste verdoppeln

python
def liste_verdoppeln(zahlen):
    """Verdoppelt jedes Element in einer Liste."""
    ergebnis = []
    for zahl in zahlen:
        ergebnis.append(zahl * 2)
    return ergebnis

Alternative (List Comprehension):

python
def liste_verdoppeln(zahlen):
    """Verdoppelt jedes Element in einer Liste."""
    return [zahl * 2 for zahl in zahlen]

Erklärung: Wir multiplizieren jedes Element mit 2 und fügen es der neuen Liste hinzu.


Lösung Bonus 13: Primzahl-Checker

python
def ist_primzahl(n):
    """Prüft, ob eine Zahl eine Primzahl ist."""
    if n < 2:
        return False

    for i in range(2, n):
        if n % i == 0:
            return False

    return True

Optimierte Version:

python
def ist_primzahl(n):
    """Prüft, ob eine Zahl eine Primzahl ist."""
    if n < 2:
        return False

    # Nur bis zur Quadratwurzel prüfen
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False

    return True

Erklärung:

  • Primzahlen sind nur durch 1 und sich selbst teilbar
  • Wir prüfen alle Zahlen von 2 bis n-1 auf Teilbarkeit
  • Wenn eine Zahl n teilt, ist es keine Primzahl
  • Optimierung: Nur bis √n prüfen nötig

Lösung Bonus 14: Fibonacci-Sequenz

python
def fibonacci(n):
    """Generiert die ersten n Fibonacci-Zahlen."""
    if n == 0:
        return []
    elif n == 1:
        return [0]

    fib = [0, 1]
    for i in range(2, n):
        fib.append(fib[i-1] + fib[i-2])

    return fib

Erklärung:

  • Fibonacci-Sequenz: Jede Zahl ist die Summe der zwei vorherigen
  • Start: [0, 1]
  • Dann: 0+1=1, 1+1=2, 1+2=3, 2+3=5, 3+5=8, ...
  • Beispiel n=7: [0, 1, 1, 2, 3, 5, 8]

Lösung Bonus 15: Liste sortieren

python
def sortiere_liste(zahlen):
    """Sortiert eine Liste aufsteigend."""
    return sorted(zahlen)

Alternative (in-place mit .sort()):

python
def sortiere_liste(zahlen):
    """Sortiert eine Liste aufsteigend."""
    kopie = zahlen.copy()
    kopie.sort()
    return kopie

Erklärung:

  • sorted(zahlen) erstellt eine neue sortierte Liste
  • zahlen.sort() sortiert die Liste direkt (in-place)
  • Wir kopieren die Liste, damit die Ursprungsliste unverändert bleibt

Informatik & ICT Unterricht Neufeld