Lektion 7 von 35Python
Python · Lektion 7 · 40 Minuten
Projekt: Galgenmännchen
Das lernst du
- Texte Buchstabe für Buchstabe verarbeiten
- Mit einer Menge von geratenen Buchstaben arbeiten
- Ein komplettes Ratespiel mit einer
while-Schleife bauen
Das Spiel
Beim Galgenmännchen denkt sich jemand ein Wort aus, die anderen raten Buchstaben. Richtige Buchstaben werden aufgedeckt, für falsche gibt es einen Fehlerpunkt. Wer das Wort errät, bevor die Fehler aufgebraucht sind, gewinnt.
Du kennst schon alles, was du dafür brauchst: Texte, Schleifen, Listen und if. Neu ist nur eine kleine Sache – eine Menge.
Eine Menge für die geratenen Buchstaben
Eine Menge (englisch set) schreibt man mit geschweiften Klammern. Sie merkt sich jeden Wert nur einmal – perfekt für geratene Buchstaben:
geraten = set() # eine leere Menge
geraten.add("a")
geraten.add("e")
geraten.add("a") # schon drin – ändert nichts
print(geraten)
print("e" in geraten, "x" in geraten)Buchstabe für Buchstabe
wort = "katze"
geraten = {"a", "t"}
for buchstabe in wort:
if buchstabe in geraten:
print(buchstabe, end=" ")
else:
print("_", end=" ")
print()Mit " ".join(liste) wird aus einer Liste ein Text mit Leerzeichen dazwischen: " ".join(["k", "_"]) ergibt "k _".
Das ganze Spiel
So sieht das fertige Spiel aus – es benutzt genau die beiden Funktionen aus deiner Aufgabe. Probier es aus (Eingaben kommen unter dem Editor):
def anzeigen(wort, geraten):
return " ".join(b if b in geraten else "_" for b in wort)
def gewonnen(wort, geraten):
return all(b in geraten for b in wort)
wort = "schule"
geraten = set()
fehler = 0
while fehler < 6 and not gewonnen(wort, geraten):
print(anzeigen(wort, geraten), f" (Fehler: {fehler}/6)")
tipp = input("Buchstabe: ").lower()
if tipp in geraten:
print("Den hattest du schon!")
elif tipp in wort:
print("Richtig!")
else:
print("Leider nicht.")
fehler += 1
geraten.add(tipp)
if gewonnen(wort, geraten):
print("Gewonnen! Das Wort war", wort)
else:
print("Verloren! Das Wort war", wort)Weiterbauen: Lass
random.choice(["schule", "python", "roboter"])ein zufälliges Wort aussuchen – und teile dein Spiel mit „Teilen“ → 🎮 als Link mit deinen Freunden.
Deine Aufgabe
Jetzt bist du dran
Schreib zwei Funktionen für das Spiel. anzeigen(wort, geraten) gibt das Wort so zurück, wie die Spieler es sehen: erratene Buchstaben offen, alle anderen als _, jeweils mit einem Leerzeichen dazwischen – anzeigen("python", {"p", "o"}) ergibt "p _ _ _ o _". gewonnen(wort, geraten) gibt True zurück, wenn alle Buchstaben des Worts erraten sind.
def anzeigen(wort, geraten):
pass
def gewonnen(wort, geraten):
pass
print(anzeigen("python", {"p", "o"}))
print(gewonnen("oma", {"o", "m", "a"}))- Denkanstoß
Geh mit
fordurch das Wort. Steht der Buchstabe in geraten, nimm ihn, sonst"_". Am Ende" ".join(liste). - Welcher Befehl hilft?
Prüfe jeden Buchstaben des Worts. Fehlt einer in geraten, gib sofort
Falsezurück – sonst am EndeTrue. - Lückencode – ergänze die ___
def anzeigen(wort, geraten): teile = ___ for buchstabe in ___: if ___: teile.append(___) else: teile.append(___) return ___ def gewonnen(wort, geraten): for buchstabe in ___: if ___: return ___ return ___ print(anzeigen("python", {"p", "o"})) print(gewonnen("oma", {"o", "m", "a"}))
Ohne Hinweise gelöst gibt es einen ⭐ auf deiner Fortschrittsseite.
Lösung anzeigen🔒 Erst nach allen Hinweisen oder 2 Prüf-Versuchen
Versuch es erst selbst – aus Fehlern lernt man am meisten. Hier ist eine mögliche Lösung:
def anzeigen(wort, geraten):
teile = []
for buchstabe in wort:
if buchstabe in geraten:
teile.append(buchstabe)
else:
teile.append("_")
return " ".join(teile)
def gewonnen(wort, geraten):
for buchstabe in wort:
if buchstabe not in geraten:
return False
return True
print(anzeigen("python", {"p", "o"}))
print(gewonnen("oma", {"o", "m", "a"}))