| Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige Überarbeitung |
| textadventure:eingabe20 [2026/05/29 10:33] – celandir | textadventure:eingabe20 [2026/05/29 11:26] (aktuell) – celandir |
|---|
| |
| <code python> | <code python> |
| wahl = input("Wohin soll es gehen? (n=Norden, o=Osten, i=Inventar) ") | wahl = input("Wohin soll es gehen? (n=Norden, o=Osten, i=Inventar) ") |
| | if wahl == "i": |
| | inventar_anzeigen() |
| | </code> |
| | |
| | <div todo> |
| | Baue jetzt eine solche Funktion in dein eigenes Adventure ein. Denke daran, überall dort den Funktionsaufruf einzubauen, wo du bisher das Inventar direkt ausgibst. |
| | </div> |
| | |
| | ---- |
| | |
| | Wenn Code nur ähnlich ist, dann kann man die **Parameter** einer Funktion verwenden, um sie etwas flexibler zu gestalten. Ein gutes Beispiel dafür ist die Eingabe, die an jedem Ort ähnlich ist, sich aber auch unterscheidet, weil es durchaus unterschiedliche Auswahlmöglichleiten gibt. Dazu müssen wir das Programm etwas umbauen, wir schauen uns das wieder an einem Beispiel an. |
| | |
| | <file python eingabe20a.py[enable_line_numbers="true"]> |
| | inventar = ["Fackel", "Seil", "Proviant", "Wasserflasche"] |
| | |
| | def inventar_anzeigen(): |
| | print("Inventar:") |
| | for ding in inventar: |
| | print(ding) |
| | |
| | def eingabe(text, moeglichkeiten): |
| | gute_antwort = False |
| | while not gute_antwort: |
| | wahl = input(text) |
| | if wahl in moeglichkeiten: |
| | gute_antwort = True |
| | return wahl |
| | else: |
| | gute_antwort = False |
| | print("Das ist hier leider nicht möglich.") |
| | |
| | def waldlichtung(): |
| | print("Waldlichtung") |
| | 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. Ein schmaler Pfad führt nach Norden und ein anderer nach Osten. Der Boden ist weich, mit Moos bedeckt, und du meinst, in der Ferne das Plätschern von Wasser zu hören.") |
| | wahl = eingabe("Wohin soll es gehen? (n=Norden, o=Osten, i=Inventar) ", ["n","o","i"]) |
| | if wahl == "i": |
| | inventar_anzeigen() |
| | waldlichtung() |
| | elif wahl == "n": |
| | flussufer() |
| | elif wahl == "o": |
| | verlasseneHuette() |
| | |
| | def flussufer(): |
| | print("Flussufer") |
| | 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. Du kannst zurück nach Süden zur Waldlichtung gehen oder versuchen, den Holzsteg zu betreten.") |
| | wahl = eingabe("Wohin soll es gehen? (s=Süden, h=Holzsteg, i=Inventar) ", ["s", "h", "i"]) |
| | if wahl == "i": |
| | inventar_anzeigen() |
| | flussufer() |
| | elif wahl == "s": |
| | waldlichtung() |
| | elif wahl == "h": |
| | holzsteg() |
| | |
| | def holzsteg(): |
| | print("Holzsteg") |
| | if "Rostiger Schlüssel" in inventar: |
| | print("Der Steg ächzt und wankt unter deinem Gewicht, aber er hält. Unter dir fließt das Wasser klar und ruhig dahin. Du kannst zurück zum Flussufer gehen.") |
| | wahl = eingabe("Was willst du tun? (f=zum Flussufer gehen, i=Inventar) ", ["f", "i"]) |
| if wahl == "i": | if wahl == "i": |
| inventar_anzeigen() | inventar_anzeigen() |
| </code> | holzsteg() |
| | elif wahl == "f": |
| | flussufer() |
| | else: |
| | print("Der Steg ächzt und wankt unter deinem Gewicht, aber er hält. Unter dir fließt das Wasser klar und ruhig dahin. Du beobachtest einige Fische und plötzlich siehst du einen rostigen Schlüssel auf Grund des Flusses liegen. Du kannst zurück zum Flussufer gehen oder versuchen, den Schlüssel zu nehmen.") |
| | wahl = eingabe("Was willst du tun? (f=zum Flussufer gehen, s=Schlüssel nehmen, i=Inventar) ", ["f", "s", "i"]) |
| | if wahl == "i": |
| | inventar_anzeigen() |
| | holzsteg() |
| | elif wahl == "f": |
| | flussufer() |
| | elif wahl == "s": |
| | inventar.append("Rostiger Schlüssel") |
| | holzsteg() |
| | |
| | def verlasseneHuette(): |
| | print("Verlassene Hütte") |
| | print("Ein schmaler Weg führt dich zu einer kleinen, verwitterten Hütte. Die Fenster sind blind vor Staub, die Tür geschlossen. 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, oder versuchen, die Tür zu öffnen.") |
| | wahl = eingabe("Was willst du tun? (w=nach Westen gehen, t=die Tür öffnen, i=Inventar) ", ["w", "t", "i"]) |
| | if wahl == "i": |
| | inventar_anzeigen() |
| | verlasseneHuette() |
| | elif wahl == "w": |
| | waldlichtung() |
| | elif wahl == "t": |
| | if "Rostiger Schlüssel" in inventar: |
| | print("Die Tür ist verschlossen, aber der rostige Schlüssel passt und du kannst die Tür aufschließen. Die Hütte ist leer und kalt und du verlässt sie sofort wieder.") |
| | else: |
| | print("Die Tür ist verschlossen und du kannst sie nicht öffnen.") |
| | verlasseneHuette() |
| | |
| | waldlichtung() |
| | </file> |
| | |
| | Neu ist hier die Funktion ''eingabe(text, moeglichkeiten)''. Diese Funktion erweitert die Funktion ''input(text)'', un prüft gleich, ob die eingegebenen Werte zulässig sind. Dazu übergeben wir der Funktion ''eingabe()'' neben dem Text, der angezeigt werden soll, auch eine Liste mit zulässigen Eingabemöglichkeiten. Die Funktion fragt jetzt so lange nach, bis eine zulässige Option eingegeben wurde. Sobald eine zulässige Option eingegeben wurde, gibt die Funktion mit dem Ausdruck ''return wahl'' den eingegebenen Text zurück und beendet sich dadurch. |
| | |
| | Der restliche Code wird so wesentlich einfacher und übersichtlicher, weil die while-Schleife, die wir zur Prüfung der Eingabe verwendet haben, nun nicht mehr an jedem Ort programmiert werden muss, sondern nur noch an einer Stelle auftaucht. |
| | |
| | Noch weiter vereinfachen können wir den Code, wenn wir die Ausgabe des Inventars direkt in der Funktion ''eingabe()'' abhandeln. Dann brauchen uns auch darum im Weiteren nicht mehr zu kümmern. Das könnte dann so aussehen: |
| | |
| | <file python eingabe20b.py[enable_line_numbers="true"]> |
| | inventar = ["Fackel", "Seil", "Proviant", "Wasserflasche"] |
| | |
| | def inventar_anzeigen(): |
| | print("Inventar:") |
| | for ding in inventar: |
| | print(ding) |
| | |
| | def eingabe(text, moeglichkeiten): |
| | gute_antwort = False |
| | while not gute_antwort: |
| | wahl = input(text) |
| | if wahl in moeglichkeiten: |
| | if wahl == "i": |
| | gute_antwort = False |
| | inventar_anzeigen() |
| | else: |
| | gute_antwort = True |
| | return wahl |
| | else: |
| | gute_antwort = False |
| | print("Das ist hier leider nicht möglich.") |
| | |
| | def waldlichtung(): |
| | print("Waldlichtung") |
| | 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. Ein schmaler Pfad führt nach Norden und ein anderer nach Osten. Der Boden ist weich, mit Moos bedeckt, und du meinst, in der Ferne das Plätschern von Wasser zu hören.") |
| | wahl = eingabe("Wohin soll es gehen? (n=Norden, o=Osten, i=Inventar) ", ["n","o","i"]) |
| | if wahl == "n": |
| | flussufer() |
| | elif wahl == "o": |
| | verlasseneHuette() |
| | |
| | def flussufer(): |
| | print("Flussufer") |
| | 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. Du kannst zurück nach Süden zur Waldlichtung gehen oder versuchen, den Holzsteg zu betreten.") |
| | wahl = eingabe("Wohin soll es gehen? (s=Süden, h=Holzsteg, i=Inventar) ", ["s", "h", "i"]) |
| | if wahl == "s": |
| | waldlichtung() |
| | elif wahl == "h": |
| | holzsteg() |
| | |
| | def holzsteg(): |
| | print("Holzsteg") |
| | if "Rostiger Schlüssel" in inventar: |
| | print("Der Steg ächzt und wankt unter deinem Gewicht, aber er hält. Unter dir fließt das Wasser klar und ruhig dahin. Du kannst zurück zum Flussufer gehen.") |
| | wahl = eingabe("Was willst du tun? (f=zum Flussufer gehen, i=Inventar) ", ["f", "i"]) |
| | if wahl == "f": |
| | flussufer() |
| | else: |
| | print("Der Steg ächzt und wankt unter deinem Gewicht, aber er hält. Unter dir fließt das Wasser klar und ruhig dahin. Du beobachtest einige Fische und plötzlich siehst du einen rostigen Schlüssel auf Grund des Flusses liegen. Du kannst zurück zum Flussufer gehen oder versuchen, den Schlüssel zu nehmen.") |
| | wahl = eingabe("Was willst du tun? (f=zum Flussufer gehen, s=Schlüssel nehmen, i=Inventar) ", ["f", "s", "i"]) |
| | if wahl == "f": |
| | flussufer() |
| | elif wahl == "s": |
| | inventar.append("Rostiger Schlüssel") |
| | holzsteg() |
| | |
| | def verlasseneHuette(): |
| | print("Verlassene Hütte") |
| | print("Ein schmaler Weg führt dich zu einer kleinen, verwitterten Hütte. Die Fenster sind blind vor Staub, die Tür geschlossen. 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, oder versuchen, die Tür zu öffnen.") |
| | wahl = eingabe("Was willst du tun? (w=nach Westen gehen, t=die Tür öffnen, i=Inventar) ", ["w", "t", "i"]) |
| | if wahl == "w": |
| | waldlichtung() |
| | elif wahl == "t": |
| | if "Rostiger Schlüssel" in inventar: |
| | print("Die Tür ist verschlossen, aber der rostige Schlüssel passt und du kannst die Tür aufschließen. Die Hütte ist leer und kalt und du verlässt sie sofort wieder.") |
| | else: |
| | print("Die Tür ist verschlossen und du kannst sie nicht öffnen.") |
| | verlasseneHuette() |
| | |
| | waldlichtung() |
| | </file> |
| |
| Wenn Code nur ähnlich ist, dann kann man die **Parameter** einer Funktion verwenden, um sie etwas flexibler zu gestalten. Wir schauen uns das wieder an einem Beispiel an. Der folgende Code stammt aus einer | |