Gestaltungsorientierte Informatik

Dies ist eine alte Version des Dokuments!


Wohin soll es gehen? (Fallunterscheidung)

Du kannst nun einen Ort oder eine Situation beschreiben und die Spieler:innen können etwas eingeben. Im nächsten Schritt müssen die Eingaben ausgewertet werden, um zu entscheiden, wie das Abenteuer weiter geht. Wir fangen mit einem einfachen Beispiel an. Du kannst das folgende Python-Programm durch Klick auf die Überschrift des Kastens direkt herunterladen und mit Thonny öffnen.

Führe es aus und sieh was passiert.

fallunterscheidung.py
  1. print("Waldlichtung")
  2. print("Du befindest dich auf einer kleinen Lichtung im Wald. Hohe Bäume umringen den Platz, ihr Blätterdach lässt nur vereinzelte Sonnenstrahlen hindurch. Der Boden ist weich, mit Moos bedeckt, und du meinst, in der Ferne das Plätschern von Wasser zu hören. Ein schmaler Pfad führt nach Norden und ein anderer nach Osten.")
  3. wahl = input("Wohin soll es gehen? (n=Norden, o=Osten) ")
  4. if wahl == "n":
  5. print("Flussufer")
  6. print("Der Pfad mündet an ein glitzerndes Flussufer. Das Wasser ist klar und fließt ruhig dahin, doch weiter auf der anderen Seite siehst du dichten Wald. Ein alter Holzsteg ragt ein Stück in den Fluss – instabil, aber vielleicht noch nutzbar. Zurück kannst du nach Süden gehen, zurück zur Waldlichtung.")
  7. elif wahl == "o":
  8. print("Verlassene Hütte")
  9. print("Ein schmaler Weg führt dich zu einer kleinen, verwitterten Hütte. Die Fenster sind blind vor Staub, die Tür steht einen Spalt offen. Drinnen scheint es dunkel, aber du meinst, einen schwachen Geruch von Rauch wahrzunehmen – vielleicht war hier kürzlich jemand. Du kannst zurück nach Westen, zur Waldlichtung, gehen.")
  10. else:
  11. print("Dunkler Wald")
  12. print("Du verlässt den schmalen Pfad und schlägst dich durchs Unterholz. Schon nach wenigen Schritten verdunkelt sich das Licht, und die Luft wird kälter. Der Wald wirkt hier älter, dichter – fast lebendig. Zwischen den knorrigen Wurzeln scheint Nebel aufzusteigen, der lautlos über den Boden kriecht. Von irgendwoher hörst du ein leises Knacken, doch als du dich umdrehst, ist nichts zu sehen. Die Stille dehnt sich aus, schwer und bedrückend – und plötzlich bist du dir nicht mehr sicher, ob du den Weg zurück noch findest.")
  13. print("Das Abenteuer geht weiter.")

In dem Programm wird zunächst in den Zeilen 1 und 2 mit der Funktion print ein Ort (Waldlichtung) beschrieben. Mit der Funktion input wird in Zeile 3 gefragt, wohin die Spieler:in gehen möchte. Der Rückgabewert der Funktion (der eingegebene Text) wird dann der Variablen wahl zugewiesen. Das kennst du soweit schon.

Ab Zeile 4 folgt nun eine Fallunterscheidung. Diese wird eingeleitet durch das Schlüsselwort if (=wenn), danach folgt eine Bedingung und dann ein Doppelpunkt. Wenn die Bedingung erfüllt ist, werden die folgenden, eingerückten Anweisungen ausgeführt, ansonsten werden sie übersprungen und das Programm wird in der ersten wieder ausgerückten Zeile (hier Zeile 7) fortgesetzt.

Die Bedingung ist ein Ausdruck, der zu einem Wahrheitswert (wahr oder falsch bzw. true oder false) ausgewertet werden kann. Wahrheitswerte (Booleans) sind ein weiterer, wichtiger Datentyp in Python. In diesem Fall wird der Wert der Variablen wahl mit dem String „n“ verglichen. Hat die Spieler:in also „n“ eingegeben, dann wird der Block mit den eingerückten Anweisungen ausgegeben und der Ort im Norden (Flussufer) beschrieben. Das Programm wird dann auch in Zeile 7 fortgesetzt.

Beachte, dass für den Vergleich zwei Gleichheitszeichen (==) verwendet werden. Ein einzelnes Gleichheitszeichen ist eine Zuweisung (einer Variablen wird ein Wert zugewiesen), ein doppeltes Gleichheitszeichen ein Vergleich. Das ist ein Fehler, den man als Anfänger:in im Programmieren leider oft macht.

In Zeile 7 steht nun elif (kurz für „else if“, d.h. „sonst, wenn“) als weiteres Schlüsselwort, wiederum gefolgt von einer Bedingung und einem Doppelpunkt. Es bdeutet, dass, wenn die if-Bedingung in Zeile 4 nicht erfüllt wurde (also etwas anderes als „n“ eingegeben wurde), dann und nur dann geprüft wird, ob die elif-Bedingung erfüllt wird. Wird diese Bedingung erfüllt, dann wird der folgende, eingerückte Block von Anweisungen ausgeführt, sonst übersprungen. Wenn die Spieler:in also kein „n“ eingegeben hat, dann wird geprüft, ob sie ein „o“ eingegeben hat. Falls ja, dann wird die verlassene Hütte beschrieben.

Wurde weder „n“ noch „o“ eingegeben, dann wird das Programm in Zeile 10 mit dem Schlüsselwort else („sonst“) fortgesetzt. Der else-Zweig (die eingerückten Anweisungen nach dem else) wird immer dann ausgeführt, wenn weder die if-Bedingung noch die elif-Bedingung erfüllt wurden.

In allen Fällen wird die Programmausführung mit der ersten wieder ausgerückten Anweisung, die auf die Fallunterscheidung folgt, fortgesetzt. Es wird also immer in Zeile 13 „Das Abenteuer geht weiter.“ in der Kommandozeile ausgegeben, was sachlich natürlich falsch ist, weil das Programm an dieser Stelle zuende ist.

Bei einer Fallunterscheidung muss es immer einen if-Zweig geben, es kann einen oder mehrere elif-Zweige geben, die dann der Reihe nach abgeprüft werden. Am Ende kann es noch einen else-Zweig geben, der immer dann ausgeführt wird, wenn keine der vorstehenden Bedingungen erfüllt wurde. Bei einer Fallunterscheidung wird nie mehr als ein Zweig ausgeführt.

Beachte, dass bei Python die Einrückungen sehr wichtig sind, denn sie kennzeichnen, welche Anweisungen zu einem Zweig (oder Block) gehören. Es ist wichtig, dass Du immer gleichmäßig einrückst, üblicherweise um 4 Leerzeichen. Wenn Du ungleichmäßig oder gar nicht einrückst, dann funktioniert das Programm nicht korrekt. Falsche Einrückungen sind ein weiterer verbreiteter Fehler bei Anfänger:innen.

Nächste Lektion: eigene_funktionen

textadventure/wohin_gehen.1776017158.txt.gz · Zuletzt geändert: von celandir