Teil 8: Was sind Funktionen – und warum sind sie nützlich?

In den bisherigen Teilen hast du dein To-Do-Listen-Programm immer Zeile für Zeile aufgebaut. Alles lief von oben nach unten – und das hat auch super funktioniert!

Aber:
Der Code wird langsam länger, und manche Teile wiederholen sich.

Zum Beispiel:

  • Das Anzeigen der Aufgaben
  • Das Speichern der Liste in der Datei

Jetzt ist der perfekte Zeitpunkt, um deinen Code besser zu strukturieren – mit Funktionen.


Was ist eine Funktion?

Eine Funktion ist ein benannter Abschnitt deines Programms.
Du kannst sagen:

„Hier ist ein Block Code, der etwas Bestimmtes macht. Ich gebe ihm einen Namen. Und wenn ich das später brauche, rufe ich ihn einfach auf.“

Statt z. B. immer das hier zu schreiben:

with open("aufgaben.txt", "w", encoding="utf-8") as datei:
    for aufgabe in aufgaben:
        datei.write(aufgabe + "\n")

… kannst du einfach sagen:

speichern()

Und Python weiß, was du meinst – weil du ihm vorher erklärt hast, was speichern() tun soll.


Ein Vergleich: Funktion = Rezept

Stell dir eine Funktion vor wie ein Rezept:

def kuchen_backen():
    print("1. Teig rühren")
    print("2. In den Ofen schieben")
    print("3. Abkühlen lassen")

Wenn du später kuchen_backen() aufrufst, macht Python alle Schritte im Rezept.


Erste eigene Funktion schreiben

def begruessung():
    print("Hallo! Willkommen zu deiner Aufgabenliste.")

Das bedeutet:
Ich definiere (def) eine Funktion mit dem Namen begruessung.

Um sie auszuführen, schreibst du einfach:

begruessung()

Jetzt wenden wir das auf unser Projekt an

Wir nehmen das Programm aus Teil 7 und bauen folgende Funktionen:

FunktionWas sie tut
liste_laden()Lädt Aufgaben aus der Datei
liste_speichern()Schreibt Aufgaben in die Datei
aufgaben_zeigen()Zeigt alle Aufgaben mit Nummer
hauptmenü()Führt das Menü aus (Hauptschleife)

Der komplette Code mit Funktionen

DATEINAME = "aufgaben.txt"
aufgaben = []

# Funktion 1: Liste laden
def liste_laden():
    global aufgaben
    try:
        with open(DATEINAME, "r", encoding="utf-8") as datei:
            aufgaben = [zeile.strip() for zeile in datei]
    except FileNotFoundError:
        aufgaben = []

# Funktion 2: Liste speichern
def liste_speichern():
    with open(DATEINAME, "w", encoding="utf-8") as datei:
        for aufgabe in aufgaben:
            datei.write(aufgabe + "\n")

# Funktion 3: Aufgaben anzeigen
def aufgaben_zeigen():
    if not aufgaben:
        print("🎉 Keine Aufgaben – du bist fertig!")
    else:
        print("\n📝 Deine Aufgaben:")
        for nummer in range(len(aufgaben)):
            print(f"{nummer + 1}. {aufgaben[nummer]}")

# Funktion 4: Hauptmenü
def hauptmenü():
    while True:
        print("\nWas möchtest du tun?")
        print("1 - Neue Aufgabe hinzufügen")
        print("2 - Aufgaben anzeigen")
        print("3 - Aufgabe erledigt")
        print("4 - Beenden")

        wahl = input("👉 Deine Auswahl: ")

        if wahl == "1":
            neue_aufgabe = input("Was möchtest du erledigen? ")
            aufgaben.append(neue_aufgabe)
            liste_speichern()
            print(f"✅ Aufgabe hinzugefügt: {neue_aufgabe}")

        elif wahl == "2":
            aufgaben_zeigen()

        elif wahl == "3":
            if not aufgaben:
                print("⚠️ Du hast keine Aufgaben zum Erledigen.")
            else:
                eingabe = input("Welche Nummer ist erledigt? ")

                if eingabe.isdigit():
                    nummer = int(eingabe) - 1

                    if 0 <= nummer < len(aufgaben):
                        erledigt = aufgaben.pop(nummer)
                        liste_speichern()
                        print(f"✅ '{erledigt}' wurde entfernt.")
                    else:
                        print("⚠️ Diese Nummer gibt es nicht.")
                else:
                    print("⚠️ Bitte gib eine gültige Zahl ein.")

        elif wahl == "4":
            print("Tschüss! 👋")
            break
        else:
            print("⚠️ Ungültige Eingabe.")

# Programm starten
liste_laden()
hauptmenü()

Neue Begriffe erklärt

BegriffBedeutung
def name():Definiert eine Funktion
name()Führt die Funktion aus
global aufgabenErlaubt der Funktion, die globale Liste zu verändern
return (bald)Gibt einen Wert zurück – kommt in Teil 9

🎉 Vorteile von Funktionen

  • Dein Code ist übersichtlicher
  • Du kannst Abschnitte wiederverwenden
  • Du verstehst leichter, was wo passiert
  • Du kannst Teile einzeln testen

🧪 Mini-Challenges

  • Schreibe eine Funktion benutzer_begruessen(), die fragt: „Wie heißt du?“ und dann mit Namen begrüßt.
  • Trenne die Eingabe der Aufgabe in eine eigene Funktion
  • Speichere die Anzahl erledigter Aufgaben und zeige sie nach jedem Löschen

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert