Zum Inhalt springen
BetaEN
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"}))

Ohne Hinweise gelöst gibt es einen ⭐ auf deiner Fortschrittsseite.

Lösung anzeigen

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"}))