Teil 13: Aufgaben als Datenobjekte – mit dict statt Text

Bis jetzt hast du Aufgaben als einfachen Text gespeichert:

"[ ] Python lernen"
"[x] Müll rausbringen"

Das hat funktioniert, aber:

  • Es ist nicht so flexibel
  • Der Status ist nur „reingetrickst“
  • Es ist schwer, damit später mehr zu machen (z. B. sortieren, filtern…)

Jetzt machst du es richtig – mit Datenstrukturen.


Was ist ein dict?

Ein dict ist ein Wörterbuch in Python: ein kleines Paket aus Schlüssel und Wert.

Beispiel:

aufgabe = {"text": "Python lernen", "erledigt": False}

Du kannst auf die Teile zugreifen wie so:

print(aufgabe["text"])        # → Python lernen
print(aufgabe["erledigt"])    # → False

🎯 Ziel dieses Teils

  • Du speicherst jede Aufgabe als dict mit Text + Status
  • Du zeigst die Aufgaben sauber an
  • Du kannst Aufgaben als „erledigt“ markieren (Status ändern)

Schritt 1: Aufgabenliste vorbereiten

aufgaben = []

Aber jede Aufgabe in dieser Liste sieht jetzt so aus:

{"text": "Wäsche waschen", "erledigt": False}

Schritt 2: Neue Aufgabe erstellen

Vorher:

aufgaben.append("[ ] Neue Aufgabe")

Jetzt:

def neue_aufgabe_eingeben():
    text = input("Was möchtest du erledigen? ")
    return {"text": text, "erledigt": False}

Und verwenden:

aufgabe = neue_aufgabe_eingeben()
aufgaben.append(aufgabe)

Schritt 3: Aufgaben anzeigen

Du willst etwas sehen wie:

1. [ ] Wäsche waschen
2. [x] Müll rausbringen

Also:

def aufgaben_anzeigen():
    if not aufgaben:
        print("🎉 Keine Aufgaben!")
    else:
        print("\n📝 Deine Aufgaben:")
        for i in range(len(aufgaben)):
            aufgabe = aufgaben[i]
            status = "[x]" if aufgabe["erledigt"] else "[ ]"
            print(f"{i + 1}. {status} {aufgabe['text']}")

Schritt 4: Aufgabe als erledigt markieren

Vorher hast du mit replace() im Text gearbeitet.

Jetzt kannst du direkt den Status ändern:

def aufgabe_abhaken():
    if not aufgaben:
        print("⚠️ Keine Aufgaben.")
        return

    try:
        nummer = int(input("Welche Nummer ist erledigt? ")) - 1
        if 0 <= nummer < len(aufgaben):
            if aufgaben[nummer]["erledigt"]:
                print("ℹ️ Diese Aufgabe ist schon erledigt.")
            else:
                aufgaben[nummer]["erledigt"] = True
                print("✅ Aufgabe abgehakt.")
        else:
            print("⚠️ Ungültige Nummer.")
    except ValueError:
        print("⚠️ Bitte gib eine Zahl ein.")

Schritt 5: Speichern und Laden (jetzt mit json)

Weil du jetzt keine einfachen Texte mehr speicherst, brauchst du ein neues Format: JSON

Speichern:

import json

def aufgaben_speichern():
    with open("aufgaben.json", "w", encoding="utf-8") as datei:
        json.dump(aufgaben, datei, ensure_ascii=False, indent=2)

Laden:

def aufgaben_laden():
    global aufgaben
    try:
        with open("aufgaben.json", "r", encoding="utf-8") as datei:
            aufgaben = json.load(datei)
    except FileNotFoundError:
        aufgaben = []

💡 json ist ein Dateiformat für strukturierte Daten – es passt perfekt zu Python-dicts und Listen.


Der vollständige Ablauf (Kernausschnitt)

import json

DATEINAME = "aufgaben.json"
aufgaben = []

def aufgaben_laden():
    global aufgaben
    try:
        with open(DATEINAME, "r", encoding="utf-8") as f:
            aufgaben = json.load(f)
    except FileNotFoundError:
        aufgaben = []

def aufgaben_speichern():
    with open(DATEINAME, "w", encoding="utf-8") as f:
        json.dump(aufgaben, f, ensure_ascii=False, indent=2)

def neue_aufgabe_eingeben():
    text = input("Was möchtest du erledigen? ")
    return {"text": text, "erledigt": False}

def aufgaben_anzeigen():
    if not aufgaben:
        print("🎉 Keine Aufgaben!")
    else:
        print("\n📝 Deine Aufgaben:")
        for i in range(len(aufgaben)):
            aufgabe = aufgaben[i]
            status = "[x]" if aufgabe["erledigt"] else "[ ]"
            print(f"{i + 1}. {status} {aufgabe['text']}")

def aufgabe_abhaken():
    if not aufgaben:
        print("⚠️ Keine Aufgaben.")
        return

    try:
        nummer = int(input("Welche Nummer ist erledigt? ")) - 1
        if 0 <= nummer < len(aufgaben):
            if aufgaben[nummer]["erledigt"]:
                print("ℹ️ Diese Aufgabe ist schon erledigt.")
            else:
                aufgaben[nummer]["erledigt"] = True
                print("✅ Aufgabe abgehakt.")
        else:
            print("⚠️ Ungültige Nummer.")
    except ValueError:
        print("⚠️ Bitte gib eine Zahl ein.")

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

        wahl = input("👉 Auswahl: ")

        if wahl == "1":
            aufgabe = neue_aufgabe_eingeben()
            aufgaben.append(aufgabe)
            aufgaben_speichern()
        elif wahl == "2":
            aufgaben_anzeigen()
        elif wahl == "3":
            aufgabe_abhaken()
            aufgaben_speichern()
        elif wahl == "4":
            print("Tschüss! 👋")
            break
        else:
            print("⚠️ Ungültige Eingabe.")

# Programmstart
aufgaben_laden()
hauptmenü()

Was du heute gelernt hast

KonzeptBedeutung
dictAufgabe mit Text + Status
jsonFormat zum Speichern strukturierter Daten
json.dump()Daten speichern
json.load()Daten laden
Zugriff auf Werteaufgabe["text"], aufgabe["erledigt"]
VorteilDu kannst später einfach mehr Infos hinzufügen (z. B. Kategorie, Fällig am, Priorität…)

Bonus-Ideen für dich

  • Erlaube das Zurücksetzen (markiere erledigte Aufgabe wieder als offen)
  • Zeige Anzahl offener und erledigter Aufgaben
  • Speichere Datum, wann eine Aufgabe hinzugefügt wurde (datetime)

Kommentare

Schreibe einen Kommentar

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