Knowledge Hub
Tools & InfraBeginnerterminal

Leitfaden — Mein erstes Python-CLI-Programm

Leitfaden: Mein erstes Python-CLI-Programm

Aufgaben-Manager im Terminal — Schritt für Schritt

Nalan Kara · 30. August 2026

Ziel des Projekts

Ein kleines Terminal-Programm bauen, das ein Menü anzeigt und auf Nutzereingaben reagiert:

=== Aufgaben-Manager ===
1. Aufgabe hinzufügen
2. Aufgabe anzeigen
3. Beenden
4. Aufgaben löschen
Wähle eine Option:

Verwendete Grundlagen: Variablen, Listen, while-Schleife, if/elif, for-Schleife, input(), print(), Listen-Methoden (.append(), .remove()).

1. Projekt-Setup im Terminal

mkdir aufgaben-cli
cd aufgaben-cli
python3 -m venv venv
source venv/bin/activate
touch cli.py

Was diese Befehle tun:

BefehlBedeutung
mkdirlegt einen neuen Ordner an
cdwechselt in den Ordner
python3 -m venv venverstellt eine isolierte Python-Umgebung nur für dieses Projekt
source venv/bin/activateaktiviert diese Umgebung (erkennbar an (venv) vor der Zeile)
touch cli.pyerstellt eine leere Datei

2. Setup in VS Code

  1. Ordner öffnen: Datei → Ordner öffnen → aufgaben-cli auswählen
  2. Terminal öffnen: Menü → Terminal → New Terminal
  3. Interpreter wählen: Cmd/Strg + Shift + P → “Python: Select Interpreter” → den Eintrag mit ./venv/bin/python wählen
  4. Ausführen: im Terminal python cli.py

Wichtig: Der Befehl python muss immer vor dem Dateinamen stehen (python cli.py), sonst meldet das Terminal “command not found” — die Datei ist ja kein eigenständiges Programm, sondern Code, den Python interpretieren muss.

3. Der fertige Code (Zeile für Zeile erklärt)

aufgaben = []

Eine leere Liste wird angelegt — das ist der “Speicher” für alle Aufgaben. Muss vor der Schleife stehen, sonst wäre sie bei jedem Durchlauf wieder leer.

while True:

Startet eine Schleife, deren Bedingung immer wahr ist — sie läuft unendlich, bis irgendwo break aufgerufen wird. Alles darunter Eingerückte gehört zu dieser Schleife.

print("=== Aufgaben-Manager ===")
print("1. Aufgabe hinzufügen")
print("2. Aufgabe anzeigen")
print("3. Beenden")
print("4. Aufgaben löschen")

Das Menü wird bei jedem Schleifendurchlauf neu angezeigt.

auswahl = input("Wähle eine Option: ")

Das Programm hält an und wartet auf eine Tastatureingabe. Der eingegebene Wert wird immer als Text (String) gespeichert — auch Zahlen wie "1", nicht 1.

if auswahl == "1":
    neue_aufgabe = input("Welche Aufgabe? ")
    aufgaben.append(neue_aufgabe)
    print("Hinzugefügt!")

Nur wenn auswahl genau "1" ist: neue Aufgabe abfragen, mit .append() ans Ende der Liste anhängen.

elif auswahl == "2":
    for aufgabe in aufgaben:
        print("-", aufgabe)

elif wird nur geprüft, wenn der if davor nicht zutraf. Die for-Schleife geht jedes Element der Liste einzeln durch und gibt es aus.

elif auswahl == "4":
    aufgabe_löschen = input("Lösche die Aufgabe: ")
    aufgaben.remove(aufgabe_löschen)
    print("Gelöscht!")

Fragt den exakten Text der zu löschenden Aufgabe ab. .remove(x) entfernt das erste Element, das genau x entspricht — bei Abweichung (Tippfehler, Groß-/Kleinschreibung) gibt es einen Fehler.

elif auswahl == "3":
    print("Bis bald!")
    break

Abschiedsnachricht, dann break — beendet die while-Schleife sofort. Das Programm läuft danach zu Ende.

4. Der komplette Code am Stück

aufgaben = []

while True:
    print("=== Aufgaben-Manager ===")
    print("1. Aufgabe hinzufügen")
    print("2. Aufgabe anzeigen")
    print("3. Beenden")
    print("4. Aufgaben löschen")

    auswahl = input("Wähle eine Option: ")

    if auswahl == "1":
        neue_aufgabe = input("Welche Aufgabe? ")
        aufgaben.append(neue_aufgabe)
        print("Hinzugefügt!")

    elif auswahl == "2":
        for aufgabe in aufgaben:
            print("-", aufgabe)

    elif auswahl == "4":
        aufgabe_löschen = input("Lösche die Aufgabe: ")
        aufgaben.remove(aufgabe_löschen)
        print("Gelöscht!")

    elif auswahl == "3":
        print("Bis bald!")
        break

5. Typische Stolperfallen (und wie du sie erkennst)

ProblemUrsacheLösung
NameError: name 'aufgaben' is not definedVariable wird benutzt, bevor sie definiert wurdeaufgaben = [] muss vor der ersten Nutzung stehen
IndentationErrorCode, der zur Schleife gehören soll, ist nicht eingerücktBetroffene Zeilen markieren (über die Zeilennummern klicken) und Tab drücken
Markierter Text verschwindet beim EinrückenMit Cmd+A alles markiert, statt ganze ZeilenÜber die Zeilennummern klicken/ziehen, nicht Cmd+A benutzen
elif wird als Fehler markiertZwischen if und elif steht anderer Code (z.B. eine fremde Schleife)if/elif/elif müssen direkt aufeinanderfolgen
command not found: cli.pypython vor dem Dateinamen vergessenImmer python cli.py schreiben, nicht nur cli.py
ValueError: list.remove(x): x not in listEingegebener Text stimmt nicht exakt mit dem Listen-Eintrag übereinMit print(aufgaben) prüfen, was wirklich gespeichert ist

6. Merksätze zum Festhalten

  • pwd → ls → cd: So orientierst du dich im Terminal.
  • while True + break: Das Grundmuster für “läuft, bis der Nutzer aufhören will”.
  • if / elif / elif: Nur EIN Zweig läuft pro Durchlauf — sobald einer zutrifft, werden die anderen übersprungen.
  • .append() fügt hinzu, .remove() entfernt ein bestimmtes Element — Gegenstücke zueinander.
  • Einrückung ist in Python keine Kosmetik, sondern legt fest, was zu welchem Block (Schleife, if) gehört.
  • Bei jedem Fehler zuerst: die letzte Zeile der Fehlermeldung lesen — dort steht meist genau, was falsch ist.

7. Mögliche nächste Schritte

  1. Erweiterung mit bereits Gelerntem: z.B. eine Zählung, wie viele Aufgaben insgesamt erledigt/offen sind.
  2. Daten dauerhaft speichern: Aufgaben in eine Datei (aufgaben.json) schreiben, damit sie nach dem Beenden des Programms nicht verloren gehen (nächster Lernschritt: with open(...), json.load()/json.dump()).
  3. Argumente statt Menü: Das Programm über python cli.py add "Titel" direkt steuern (nächster Lernschritt: Modul argparse).