Was habe ich eigentlich dabei?

Nun gibt es in deinem Adventure ein Inventar. Anzeigen lassen kann man das aber noch nicht. Manchmal möchte man aber vielleicht schon wissen, was man dabei hat. In Python gibt es natürlich die Möglichkeit, alle Elemente einer Liste der Reihe nach zu bearbeiten. Dazu benötigt man eine neue Form der Wiederholungsanweisung, die for-Schleife. Vereinfacht kann das wie folgt aussehen:

inventar = ["Fackel", "Seil", "Proviant", "Wasserflasche"]
 
print("Inventar:")
for ding in inventar:
    print(ding)

Analysiere den vorstehenden Quelltext, indem du ihn mit dem Debugger ausführst. Lasse dir die Variablen anzeigen.

Wie du siehst, erhält die Variable ding der Reihe nach die Werte aller Elemente der Liste inventar. Wenn jedes Element der Liste abgearbeitet ist, dann endet die for-Schleife. Der Schleifenrumpf, also der Block innerhalb der Schleife kann dabei natürlich deutlich umfangreicher sein als einfach nur ein print() wie in dem Beispiel.

Baue nun in dein Adventure die Möglichkeit ein, sich das Inventar anzeigen zu lassen. An welcher Stelle passt das gut? Wie muss man das in deinen Code einfügen?

Eine mögliche Lösung könnte wie folgt aussehen:

iteration.py
  1. inventar = ["Fackel", "Seil", "Proviant", "Wasserflasche"]
  2.  
  3. def waldlichtung():
  4. gute_antwort = False
  5. while not gute_antwort:
  6. print("Waldlichtung")
  7. 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.")
  8. wahl = input("Wohin soll es gehen? (n=Norden, o=Osten, i=Inventar) ")
  9. if wahl == "i":
  10. print("Inventar:")
  11. for ding in inventar:
  12. print(ding)
  13. elif wahl == "n":
  14. gute_antwort = True
  15. flussufer()
  16. elif wahl == "o":
  17. gute_antwort = True
  18. verlasseneHuette()
  19. else:
  20. dunklerWald()
  21.  
  22. def flussufer():
  23. gute_antwort = False
  24. while not gute_antwort:
  25. print("Flussufer")
  26. 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.")
  27. wahl = input("Wohin soll es gehen? (s=Süden, h=Holzsteg, i=Inventar) ")
  28. if wahl == "i":
  29. print("Inventar:")
  30. for ding in inventar:
  31. print(ding)
  32. elif wahl == "s":
  33. gute_antwort = True
  34. waldlichtung()
  35. elif wahl == "h":
  36. gute_antwort = True
  37. holzsteg()
  38. else:
  39. dunklerWald()
  40.  
  41. def holzsteg():
  42. gute_antwort = False
  43. while not gute_antwort:
  44. print("Holzsteg")
  45. if "Rostiger Schlüssel" in inventar:
  46. 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.")
  47. wahl = input("Was willst du tun? (f=zum Flussufer gehen, i=Inventar) ")
  48. if wahl == "i":
  49. print("Inventar:")
  50. for ding in inventar:
  51. print(ding)
  52. elif wahl == "f":
  53. gute_antwort = True
  54. flussufer()
  55. else:
  56. 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.")
  57. wahl = input("Was willst du tun? (f=zum Flussufer gehen, s=Schlüssel nehmen, i=Inventar) ")
  58. if wahl == "i":
  59. print("Inventar:")
  60. for ding in inventar:
  61. print(ding)
  62. elif wahl == "f":
  63. gute_antwort = True
  64. flussufer()
  65. elif wahl == "s":
  66. gute_antwort = True
  67. inventar.append("Rostiger Schlüssel")
  68. holzsteg()
  69.  
  70. def verlasseneHuette():
  71. gute_antwort = False
  72. while not gute_antwort:
  73. print("Verlassene Hütte")
  74. 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.")
  75. wahl = input("Was willst du tun? (w=nach Westen gehen, t=die Tür öffnen, i=Inventar) ")
  76. if wahl == "i":
  77. print("Inventar:")
  78. for ding in inventar:
  79. print(ding)
  80. elif wahl == "w":
  81. gute_antwort = True
  82. waldlichtung()
  83. elif wahl == "t":
  84. if "Rostiger Schlüssel" in inventar:
  85. 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.")
  86. else:
  87. print("Die Tür ist verschlossen und du kannst sie nicht öffnen.")
  88. else:
  89. dunklerWald()
  90.  
  91. def dunklerWald():
  92. print("Dunkler Wald")
  93. 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. Schnell kehrst du um, bevor du den Weg zurück nicht mehr findest.")
  94.  
  95. waldlichtung()

Nächste Lektion: (TBD)