Zum Inhalt springen

cat posts/python-lernen-03-entscheidungen-und-schleifen.md

Python lernen (Teil 3): Entscheidungen & Schleifen

if/elif/else, Vergleiche und Schleifen – der Game-Loop, mit dem der Dungeon endlich auf Eingaben reagiert.

Bis Teil 2 lief unser Programm stur von oben nach unten. Heute lernt es, zu entscheiden und zu wiederholen – die zwei Werkzeuge, mit denen aus einer Befehlsliste ein echtes Programm wird. Am Ende hat der Dungeon einen Game-Loop, der auf Deine Eingaben hört.

Vergleiche ergeben Wahrheitswerte

Bevor Python etwas entscheiden kann, muss eine Frage mit True oder False beantwortet werden. Das machen Vergleichsoperatoren:

>>> 100 > 50      # True
>>> hp == 0       # ist hp gleich 0? (== prüft, = weist zu!)
>>> hp != 0       # ist hp ungleich 0?
>>> hp <= 25      # kleiner oder gleich 25?

Der häufigste Anfängerfehler: = (Zuweisung) und == (Vergleich) verwechseln. Ein einzelnes = weist zu, doppelt == vergleicht.

Bedingungen: if, elif, else

Mit if führst Du Code nur aus, wenn eine Bedingung True ist:

hp = 20
if hp <= 25:
    print("Vorsicht, Du blutest stark!")

Beachte zwei Dinge: Der Doppelpunkt am Zeilenende und die Einrückung der nächsten Zeile. Python gruppiert Code nicht mit Klammern, sondern über die Einrückung – vier Leerzeichen sind Standard. Alles, was gleich weit eingerückt ist, gehört zusammen.

Mehrere Fälle deckst Du mit elif (sonst-wenn) und else (andernfalls) ab:

if hp <= 0:
    print("Du bist tot.")
elif hp <= 25:
    print("Kritisch!")
else:
    print("Alles im grünen Bereich.")

Python prüft von oben nach unten und nimmt den ersten Zweig, der passt.

Bedingungen verknüpfen

Mehrere Bedingungen kombinierst Du mit and, or und not:

if hp > 0 and "Schlüssel" in inventar:
    print("Du lebst und kannst die Tür öffnen.")

if not tot:
    print("Weiter geht's.")

and ist nur True, wenn beide Seiten True sind; or, wenn mindestens eine es ist; not dreht den Wahrheitswert um.

Schleifen: etwas wiederholen

Eine while-Schleife wiederholt ihren Block, solange die Bedingung True ist:

runden = 3
while runden > 0:
    print(f"Noch {runden} Runden.")
    runden = runden - 1

Vergisst Du das runden - 1, läuft die Schleife ewig – die berüchtigte Endlosschleife (rauskommen: Strg+C).

Eine for-Schleife geht eine Sammlung durch, Element für Element:

for richtung in ["norden", "osten", "sueden"]:
    print(f"Ausgang: {richtung}")

Mit break brichst Du eine Schleife sofort ab, mit continue springst Du zum nächsten Durchlauf.

Der Game-Loop

Ein Text-Adventure ist im Kern eine while-Schleife, die immer wieder einen Befehl einliest und darauf reagiert – bis der Spieler aufhört. Genau das bauen wir jetzt. while True läuft endlos, bis ein break greift:

# Dungeon – Teil 3: Game-Loop & erster Raum
name = input("Wie heißt Du, Abenteurer? ")
hp = 100
print(f"\nWillkommen, {name}! (HP: {hp})")
print("Du stehst in einer dunklen Halle. Gänge führen nach Norden und Osten.")

while True:
    befehl = input("\n> ")

    if befehl == "ende":
        print("Du verlässt das Verlies. Bis zum nächsten Mal.")
        break
    elif befehl == "norden":
        print("Du gehst nach Norden und stehst vor einer verschlossenen Tür.")
    elif befehl == "osten":
        print("Im Osten döst ein Goblin. Noch hat er Dich nicht bemerkt.")
    elif befehl == "status":
        if hp <= 25:
            print(f"HP: {hp} – kritisch!")
        else:
            print(f"HP: {hp}")
    else:
        print("Das verstehe ich nicht. Versuch: norden, osten, status, ende.")

Hier steckt fast alles aus diesem Teil drin: die Endlosschleife als Game-Loop, die if/elif/else-Kette zum Verzweigen auf den Befehl, ein verschachteltes if für den HP-Status und break, um den Loop zu verlassen. Ein Lauf:

Wie heißt Du, Abenteurer? Karl

Willkommen, Karl! (HP: 100)
Du stehst in einer dunklen Halle. Gänge führen nach Norden und Osten.

> osten
Im Osten döst ein Goblin. Noch hat er Dich nicht bemerkt.

> ende
Du verlässt das Verlies. Bis zum nächsten Mal.

Noch sind die Räume nur Text in if-Zweigen. Das wird schnell unübersichtlich – deshalb speichern wir sie im nächsten Teil als richtige Daten.

Stolperfallen

  • = statt == in einer Bedingung ist ein SyntaxError. Vergleichen ist immer ==.
  • Einrückung gemischt. Tabs und Leerzeichen nicht mischen – Python quittiert das mit IndentationError. Stell Deinen Editor auf „4 Leerzeichen".
  • Endlosschleife. Wenn sich in einer while-Bedingung nie etwas ändert, läuft sie ewig. Strg+C bricht ab.

Übungen

  1. Erweiter den Game-Loop um einen Befehl heilen, der die HP um 20 erhöht (aber nicht über 100) und das Ergebnis ausgibt.
Lösung
elif befehl == "heilen":
    hp = min(hp + 20, 100)
    print(f"Du fühlst Dich besser. HP: {hp}")
  1. Schreib eine for-Schleife, die einen Countdown von 3 bis 1 ausgibt und danach "Los!". (Tipp: range(3, 0, -1) zählt rückwärts.)
Lösung
for i in range(3, 0, -1):
    print(i)
print("Los!")
`range(start, stop, schritt)` erzeugt eine Zahlenfolge; `stop` ist dabei exklusiv, deshalb `0` statt `1`.

Vertiefung: Für das Verzweigen auf Befehle gibt es seit Python 3.10 eine mächtigere Alternative zur if-Kette – match/case: strukturelles Pattern Matching.

Im nächsten Teil

Räume als if-Zweige skalieren nicht. In Teil 4 lernst Du Sammlungen – Listen und Dictionaries –, mit denen wir die Welt als Daten beschreiben: Räume, Ausgänge und ein echtes Inventar.

0 Kommentare

Noch keine Kommentare. Sei der/die Erste!