Assignment Chef icon Assignment Chef
All German tutorials

Programming lesson

Funktionen und Funktionskomposition in Python: Quadratmeterberechnung für ein Hausprojekt

Lerne in diesem Tutorial, wie du mit Python-Funktionen und Funktionskomposition die Gesamtquadratmeterzahl eines Hauses berechnest – ideal für Programmieranfänger und inspiriert von einem echten Lab-Aufgabenblatt.

Python Funktionen Funktionskomposition Python Quadratmeterberechnung Python CSCI 141 Lab 6 Python Tutorial Quadratmeter Funktionen in Python Python Programmierung Anfänger Hausfläche berechnen Python Python prompt_user Funktion Python Akkumulator Muster Python Modulare Programmierung Python Lab 6 Lösung Python Hausbau Programm Python Funktionen Beispiel Python input Typkonvertierung Python main Funktion

Einführung: Warum Funktionen und Funktionskomposition wichtig sind

Stell dir vor, du arbeitest für ein Bauunternehmen, das Häuser mit quadratischen oder rechteckigen Räumen baut. Deine Aufgabe: Ein Programm schreiben, das die Gesamtquadratmeterzahl eines Hauses berechnet. Der Benutzer gibt die Anzahl der Räume und deren Maße ein. Klingt einfach? Aber wenn du denselben Code immer wiederholst, wird es schnell unübersichtlich. Hier kommen Funktionen und Funktionskomposition ins Spiel – genau wie in der CSCI 141 – Spring 2019 Lab 6 Aufgabe.

In diesem Tutorial lernst du, wie du mit Python-Funktionen und Funktionskomposition ein sauberes, modulares Programm schreibst. Wir verwenden ein aktuelles Beispiel: die Berechnung der Wohnfläche eines Hauses, inspiriert von der Lab 6 Aufgabenstellung. Du wirst sehen, wie du mit nur drei Funktionen (main, room_square_feet, prompt_user) eine komplexe Aufgabe lösen kannst.

Was sind Funktionen in Python?

Eine Python-Funktion ist ein wiederverwendbarer Codeblock, der eine bestimmte Aufgabe erfüllt. Du definierst sie mit def und rufst sie dann auf. Funktionen helfen, Code-Duplizierung zu vermeiden und machen Programme lesbarer. In der Lab 6 Aufgabe sind nur drei Funktionen erlaubt – das zwingt dich, modular zu denken.

Beispiel: Eine einfache Funktion

def quadratmeter(laenge, breite):
    return laenge * breite

Diese Funktion berechnet die Fläche eines Rechtecks. Du rufst sie auf mit quadratmeter(5, 4) und erhältst 20. Einfach, oder? Aber in der Lab 6 Aufgabe musst du auch zwischen quadratischen und rechteckigen Räumen unterscheiden. Dafür brauchst du Funktionskomposition.

Funktionskomposition: Funktionen, die andere Funktionen aufrufen

Funktionskomposition bedeutet, dass eine Funktion eine andere Funktion aufruft, um eine komplexe Aufgabe zu lösen. In unserem Fall ruft room_square_feet die Funktion prompt_user auf, um die Maße eines Raums zu erfragen. Und main ruft room_square_feet für jeden Raum auf. Das ist wie bei einer App wie ChatGPT, die verschiedene Module kombiniert, um eine Antwort zu generieren – oder wie bei einem E-Sports-Turnier, wo verschiedene Teams (Funktionen) zusammenarbeiten, um den Sieg zu erringen.

Die drei Funktionen im Detail

Laut Aufgabenstellung brauchst du genau drei Funktionen:

  1. prompt_user: Fragt den Benutzer nach einer Eingabe und gibt den Wert im richtigen Typ zurück (z.B. int oder str).
  2. room_square_feet: Berechnet die Quadratmeterzahl eines Raums. Dazu ruft sie prompt_user auf – einmal bei einem quadratischen Raum (eine Seitenlänge), zweimal bei einem rechteckigen (Länge und Breite).
  3. main: Steuert den Ablauf: fragt nach der Anzahl der Räume, ruft für jeden Raum room_square_feet auf und summiert die Ergebnisse auf (Akkumulator-Muster).

Schritt 1: Die prompt_user-Funktion schreiben

prompt_user bekommt zwei Parameter: einen String (die Frage) und einen String (den gewünschten Rückgabetyp, z.B. "integer" oder "string"). Sie gibt den eingegebenen Wert im passenden Typ zurück. In der Lab 6 Aufgabe wird sie verwendet, um nach der Form des Raums, der Seitenlänge oder Länge/Breite zu fragen.

def prompt_user(frage, typ):
    antwort = input(f"Was ist die {frage}? ")
    if typ == "integer":
        return int(antwort)
    elif typ == "string":
        return antwort
    else:
        return antwort

Wichtig: Die Funktion verwendet input() und konvertiert die Eingabe in den gewünschten Typ. So vermeidest du Fehler, wenn der Benutzer eine Zahl eingibt, die als String behandelt wird. Teste sie im interaktiven Modus: prompt_user("Anzahl der Räume", "integer").

Schritt 2: Die room_square_feet-Funktion implementieren

Diese Funktion bekommt einen Parameter: die Form des Raums ("square" oder "rectangle"). Sie ruft prompt_user auf, um die Maße zu erfragen, und gibt die Quadratmeterzahl zurück. Das ist ein gutes Beispiel für Funktionskomposition.

def room_square_feet(form):
    if form == "square":
        seite = prompt_user("Seitenlänge des quadratischen Raums", "integer")
        return seite * seite
    elif form == "rectangle":
        laenge = prompt_user("Länge des rechteckigen Raums", "integer")
        breite = prompt_user("Breite des rechteckigen Raums", "integer")
        return laenge * breite

Beachte: Bei einem quadratischen Raum wird prompt_user nur einmal aufgerufen, bei einem rechteckigen zweimal. Das entspricht genau der Lab 6 Aufgabenstellung.

Schritt 3: Die main-Funktion mit Akkumulator-Muster

Die main-Funktion hat keine Parameter und keinen Rückgabewert. Sie fragt nach der Anzahl der Räume, ruft dann für jeden Raum room_square_feet auf und addiert die Ergebnisse. Das ist das Akkumulator-Muster (siehe Abschnitt 6.4 des Lehrbuchs).

def main():
    anzahl = prompt_user("Anzahl der Räume", "integer")
    gesamt = 0
    for i in range(1, anzahl + 1):
        form = prompt_user(f"Form von Raum {i}", "string")
        quadratmeter = room_square_feet(form)
        gesamt += quadratmeter
    print(f"Die Gesamtquadratmeterzahl des Hauses beträgt: {gesamt}")

Am Ende rufst du main() in einem Hauptschutz (main guard) auf:

if __name__ == "__main__":
    main()

Damit wird main nur ausgeführt, wenn die Datei direkt gestartet wird, nicht beim Importieren.

Vollständiges Programmbeispiel

Hier ist das komplette Programm, das du in einer Datei namens squarefootage.py speichern kannst. Es folgt den guten Programmierkonventionen und verwendet aussagekräftige Variablennamen.

def prompt_user(frage, typ):
    antwort = input(f"Was ist die {frage}? ")
    if typ == "integer":
        return int(antwort)
    elif typ == "string":
        return antwort
    else:
        return antwort

def room_square_feet(form):
    if form == "square":
        seite = prompt_user("Seitenlänge des quadratischen Raums", "integer")
        return seite * seite
    elif form == "rectangle":
        laenge = prompt_user("Länge des rechteckigen Raums", "integer")
        breite = prompt_user("Breite des rechteckigen Raums", "integer")
        return laenge * breite

def main():
    anzahl = prompt_user("Anzahl der Räume", "integer")
    gesamt = 0
    for i in range(1, anzahl + 1):
        form = prompt_user(f"Form von Raum {i}", "string")
        quadratmeter = room_square_feet(form)
        gesamt += quadratmeter
    print(f"Die Gesamtquadratmeterzahl des Hauses beträgt: {gesamt}")

if __name__ == "__main__":
    main()

Testen des Programms

Führe das Programm aus. Du wirst nacheinander aufgefordert, die Anzahl der Räume, die Form jedes Raums und die Maße einzugeben. Ein Beispielablauf:

$ python squarefootage.py
Was ist die Anzahl der Räume? 3
Was ist die Form von Raum 1? square
Was ist die Seitenlänge des quadratischen Raums? 10
Was ist die Form von Raum 2? rectangle
Was ist die Länge des rechteckigen Raums? 12
Was ist die Breite des rechteckigen Raums? 8
Was ist die Form von Raum 3? square
Was ist die Seitenlänge des quadratischen Raums? 5
Die Gesamtquadratmeterzahl des Hauses beträgt: 221

Die Berechnung: 10*10 = 100, 12*8 = 96, 5*5 = 25, Summe = 221. Passt!

Häufige Fehler und Tipps

  • Falsche Reihenfolge der Eingabeaufforderungen: Die Lab 6 Aufgabe verlangt, dass die Aufforderungen in einer bestimmten Reihenfolge erscheinen. Achte darauf, dass zuerst nach der Anzahl der Räume, dann nach der Form jedes Raums und dann nach den Maßen gefragt wird.
  • Vergessen der Typkonvertierung: Wenn du die Eingabe nicht in int umwandelst, erhältst du einen Fehler bei der Multiplikation. Verwende int() in prompt_user.
  • Zu viele Funktionen: Die Aufgabe erlaubt nur drei Funktionen. Halte dich daran, auch wenn du mehr schreiben möchtest. Das fördert die modulare Programmierung.

Warum dieses Beispiel zeitgemäß ist

Stell dir vor, du entwickelst eine KI-gestützte Hausplanungs-App, die automatisch die Fläche berechnet – ähnlich wie ChatGPT oder Midjourney Bilder generiert. Oder denk an E-Sports-Turniere wie die League of Legends Weltmeisterschaft, wo verschiedene Teams (Funktionen) zusammenarbeiten, um ein Ziel zu erreichen. Genau das machst du hier: Du kombinierst kleine, spezialisierte Funktionen zu einem größeren Ganzen. Das ist Funktionskomposition in Aktion!

Fazit

Mit diesem Tutorial hast du gelernt, wie du Python-Funktionen und Funktionskomposition einsetzt, um eine praktische Aufgabe zu lösen. Du hast die Lab 6 Aufgabe aus der CSCI 141 verstanden und kannst das Konzept auf andere Projekte übertragen. Egal ob du eine App für die Hausverwaltung baust oder ein Spiel programmierst – modulare Funktionen sind der Schlüssel zu sauberem Code. Probier es selbst aus und erweitere das Programm, zum Beispiel um die Berechnung von Wänden oder Decken. Viel Erfolg!