Lektion 6: Projekt: Zahlenraten
Zeit für dein erstes richtiges Programm. Der Computer denkt sich eine Zahl zwischen 1 und 100 aus, du rätst, und er sagt dir nach jedem Versuch "zu groß" oder "zu klein". Alles, was du dafür brauchst, kennst du schon: Variablen, if/elif, eine while-Schleife und break. Neu ist nur eine Sache.
Baustein 1: Der Zufall
Python bringt fertige Werkzeugkästen mit, sogenannte Module. Mit import random holst du dir den Zufalls-Werkzeugkasten, und random.randint(1, 100) liefert eine zufällige ganze Zahl von 1 bis 100. Führ das mehrmals aus, es kommt (fast) jedes Mal etwas anderes:
Baustein 2: Ein einzelner Rateversuch
Bevor die Schleife dazukommt, bau die Logik für einen Versuch. Das ist ein sauberer Weg, Programme zu entwickeln: erst ein kleines Stück bauen und testen, dann erweitern.
Baustein 3: Die Schleife macht das Spiel
Jetzt kommt der Trick: Wir packen den Rateversuch in eine while True-Schleife. Die läuft absichtlich endlos, und erst bei einem Treffer bricht break aus. Dazu zählt eine Variable die Versuche mit. Das ist das komplette Spiel, spiel eine Runde:
Profi-Frage: Wie viele Versuche brauchst du höchstens, wenn du clever rätst? Antwort: 7. Wenn du immer die Mitte des verbleibenden Bereichs tippst (50, dann 25 oder 75, ...), halbierst du den Suchraum jedes Mal. Das ist die binäre Suche, ein Algorithmus, der in der IHK-Prüfung regelmäßig vorkommt. Du hast ihn gerade beim Spielen benutzt.
Übung 6.1: Baue das Spiel so um, dass der Spieler nur 7 Versuche hat. Nach dem 7. Fehlversuch endet das Spiel mit "Verloren! Die Zahl war ...". Tipp: Ersetze while True durch while versuche < 7 und gib die Verloren-Meldung nach der Schleife aus, falls kein Treffer kam.
Musterlösung anzeigen
import random
geheimzahl = random.randint(1, 100)
versuche = 0
gewonnen = False
while versuche < 7:
tipp = int(input("Dein Tipp: "))
versuche = versuche + 1
if tipp < geheimzahl:
print("Zu klein!")
elif tipp > geheimzahl:
print("Zu gross!")
else:
print(f"Treffer nach {versuche} Versuchen!")
gewonnen = True
break
if not gewonnen:
print(f"Verloren! Die Zahl war {geheimzahl}.")Übung 6.2: Gib dem Spieler am Ende eine Bewertung: bis 5 Versuche "Stark!", bis 8 "Solide.", ab 9 "Da geht noch was." Du brauchst nur ein if/elif/else nach dem Treffer.
Musterlösung anzeigen
# Nach dem "Treffer"-print, vor dem break:
if versuche <= 5:
print("Stark!")
elif versuche <= 8:
print("Solide.")
else:
print("Da geht noch was.")