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 einSyntaxError. 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
- 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}")
- 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!")
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!
Anmelden um einen Kommentar zu hinterlassen.