Ein frei kopier- und anpassbares Lehrmittel von eduskript.org

Prüfungsbesprechung

Zwei Stolpersteine sind in der Prüfung besonders oft aufgetaucht. Beide schauen wir uns hier nochmal ganz kompakt an.

1. Codeblöcke in Python

Jeder Codeblock in Python besteht aus zwei Teilen:

  • Blockkopf — endet immer mit einem Doppelpunkt :
  • Blockkörper — alles, was dazugehört, ist eingerückt (Tabulator)

Blöcke können verschachtelt werden: Im Körper eines Blocks kann ein neuer Blockkopf stehen — dessen Körper wird dann eine Stufe weiter eingerückt. Und das funktioniert bei allen Blockarten gleich: def, if, elif, else, for, while.

def funktion(n):              # Blockkopf → Doppelpunkt
    print("Im Funktionskörper")   # Blockkörper → eingerückt
    for i in range(n):        #     Blockkopf im Block
        if i % 2 == 0:        #         und noch einer
            print(i, "ist gerade")    # drei Stufen tief
    print("Wieder nur in der Funktion")   # gehört zur for-Schleife NICHT mehr
Daran erkennen Sie alles

Die Einrückung ist in Python keine Verschönerung — sie bestimmt, was wozu gehört. Eine Zeile weiter links = der Block ist zu Ende.

2. Funktionsvariablen gehören in die Funktion

  • Der Codeblock einer Funktion ist wie ein Gefängnis: ein separater Speicher, ein eigenes kleines Unterprogramm.
  • Was drinnen passiert, ist getrennt vom Hauptprogramm — die Funktion arbeitet nur mit dem, was sie als Parameter erhält und was sie selbst anlegt.
  • Darum gilt: Variablen, die eine Funktion braucht und verändert, werden in der Funktion angelegt — nicht draussen im Hauptprogramm.

So sah der Fehler in vielen Prüfungen aus:

summe = 0                      # ❌ draussen im Hauptprogramm angelegt

def summe_teilbar(n):
    for i in range(1, n + 1):
        if i % 3 == 0:
            summe = summe + i  # 💥 Fehler: die Funktion kennt "ihr" summe nicht
    return summe

Und so gehört es:

def summe_teilbar(n):
    summe = 0                  # ✅ gehört der Funktion — im Funktionskörper angelegt
    for i in range(1, n + 1):
        if i % 3 == 0:
            summe = summe + i
    return summe

print(summe_teilbar(10))       # das Resultat verlässt das Gefängnis nur via return
Merksatz

Alles, was die Funktion braucht, kommt als Parameter rein. Alles, was sie zurückgeben will, geht mit return raus. Dazwischen lebt jede Variable im Funktionskörper — und nirgendwo sonst.

Zum selbst Nachschauen

Auf pythontutor.com können Sie beliebigen Python-Code Schritt für Schritt ausführen und zusehen, wie für jeden Funktionsaufruf ein eigener, separater Speicherrahmen entsteht — und nach dem return wieder verschwindet. Kopieren Sie das Beispiel oben hinein und klicken Sie sich durch.