Python Tutorial
- jetzt Python programmieren lernen

Übung: Spiel Zahlenraten

Wir haben im letzten Kapitel die while-Schleife in Python kennengelernt. Wie können wir daraus ein kleines Spiel basteln? Lustigerweise benötigen wir die while-Schleife so gut wie immer in Python-Programmen. Aber langsam mit den Pferden.

Unser Zahlenraten-Spiel: der Computer bestimmt durch Zufall eine Zahl zwischen 0 und 100. Wir haben 7 Versuche, exakt diese Zahl zu erraten. Bei jedem Rateversuch bekommen wir eine der folgenden 3 möglichen Reaktionen von unserem Spiel:

  • deine geratene Zahl ist zu groß
  • deine geratene Zahl ist zu klein
  • Gewonnen! Die geheime Zahl ist nicht mehr geheim

Zusätzlich müssen wir neben der Zahl auch noch die Anzahl der Runden kontrollieren. Unsere while-Schleife läuft maximal siebenmal durch.

Für diese maximal 7 Durchgänge gibt es verschiedene Möglichkeiten:

Die im letzten Kapitel kennengelernte Variante:

durchgang = 0
while durchgang < 7:
    print(durchgang)
    durchgang = durchgang + 1
print("nach der Schleife")

Wir benötigen natürlich die Möglichkeit die Schleife vorzeitig zu beenden. Dies können wir über die Anweisung break in einer if-Abfrage erreichen. Im folgenden Beispiel brechen wir bei 3 ab – im Spiel brechen wir ab, wenn der Spieler der Zahl erraten hat.

durchgang = 0
while durchgang < 7:
    print(durchgang)
    durchgang = durchgang + 1
    if (durchgang == 3):
        break
print("nach der Schleife")

die „unendliche“ while-Schleife

Die zweite Möglichkeit von einer while-Schleife ist in den meisten Fällen die bessere Vorgehensweise. Wir wissen bei vielen Anwendungen nicht, wie oft eine Schleife durchlaufen werden muss. Daher geben wir der while-Schleife nur eine Variable mit dem Vorgabewert „True“ mit. Jetzt können wir innerhalb der while-Schleife die Bedingung abfragen.

durchgang = 0
aktiv = True
while aktiv:
    print(durchgang)
    durchgang = durchgang + 1
    if (durchgang == 3):
        aktiv = False
print("nach der Schleife")

Was ist nun der große Vorteil von der zweiten Variante? Ich kann auf Benutzereingaben reagieren und beschränke die Anzahl der Schleifendurchläufe nicht im Vorfeld. Nehmen wir an, der Benutzer kann das Programm beenden mit der Eingabe von „ende“. Somit können wir zusätzlich die Benutzereingabe kontrollieren und sobald vom Benutzer „ende“ eintippt wird, setzen wir den Inhalt der Variable „aktiv“ auf „False“ und das Programm wird beendet:

durchgang = 0
aktiv = True
while aktiv:
    print(durchgang)
    durchgang = durchgang + 1
    benutzereingabe = input("Bitte Zahl eingeben: ")
    if (benutzereingabe == "ende"):
        aktiv = False
print("nach der Schleife")

Wichtig ist, dass wir hier Python3 nutzen. Ansonsten bekommen wir eine Fehlermeldung bei Python2.

Aufgabe: Zahlenratespiel

Der Spieler hat 7-mal die Chance die vom Computer durch Zufall festgelegte Zahl zu erraten. Als Rückmeldung bekommt er nur:

  • deine geratene Zahl ist zu groß
  • deine geratene Zahl ist zu klein
  • Gewonnen! Die geheime Zahl ist nicht mehr geheim

Wenn der Spieler gewonnen hat, kommt eine entsprechende Meldung. Hat der Spieler die Zahl nicht erraten, kommt als Nachricht: „Schade – verloren. Einfach nochmals probieren“.

Bitte erst selber eine Lösung probieren, bevor die folgende Lösung kommt. Alle benötigten Python-Befehle wurden in den vorherigen Kapiteln vorgestellt.

Lösung: Zahlenratespiel

Sehr oft wird man am Anfang beim Programmieren über die Umwandlung von den Inhalten der Variablen stolpern. Wir wollen einen Vergleich zwischen der Nutzereingabe und einer Zahl machen. Also müssen wir eine Umwandlung über int machen. Wenn wir am Spielende die vom Computer erstellte Zahl ausgeben wollen, müssen wir die Zahl für die Ausgabe dann umwandeln anhand von var.

Hier nun eine mögliche Lösung (und immer daran denken: es gibt mehr als einen Weg nach Rom):

import random
durchgang = 0
aktiv = True
ratezahl = random.randint(0,100)

while aktiv:
    durchgang = durchgang + 1
    print()   # für Abstand (nur Optik)
    print(durchgang)
    benutzereingabe = int (input("Bitte Zahl eingeben: "))
    
    if benutzereingabe == ratezahl:
        print("Gewonnen! Die geheime Zahl ist nicht mehr geheim")
        aktiv = False
        break
    elif benutzereingabe > ratezahl:
        print("deine geratene Zahl ist zu groß")
    else:
        print("deine geratene Zahl ist zu klein")
        
    if (durchgang == 7):
        print("Schade – verloren. Einfach nochmals probieren")
        print("Es war die Zahl " + str(ratezahl))
        aktiv = False
print("Ende des Spiels")

Weiterempfehlen • Social Bookmarks • Vielen Dank

Bitte unterstützen Sie dieses Projekt

Sie können dieses Projekt in verschiedenen Formen unterstützen - wir würden uns freuen und es würde uns für weitere Inhalte motivieren :).

Empfehlen Sie es weiter - wir freuen uns immer über Links und Facebook-Empfehlungen.

Das neue E-Book zum Kurs gibt es zum Kaufen.

Sie können uns auch eine Spende über PayPal zukommen lassen.

Bestellen Sie Bücher über folgenden Link bei Amazon:
Bücher über Python

Vielen Dank für Ihre Unterstützung