Klassisches Zahlenraten
Das nächste Programm habe ich »Klassisches Zahlenraten« genannt, weil es in fast jeder Anleitung zum Programmieren irgendwann auftaucht. Das ist kein Zufall, denn es eignet sich sehr gut, um den Umgang mit while-Schleifen und if-Abfragen zu verstehen und zu festigen.
Wenn du die vorhergehenden Programme gut verstanden hast, dann solltest du vielleicht schon in der Lage sein, das Zahlenraten selbst zu programmieren. Probiere es aus. Als Hilfestellung hier der genaue Ablauf des Zahlenratens:
-
Das Programm denkt sich eine zufällige Zahl zwischen 1 und 100 aus (zufallszahl).
-
Der Benutzer gibt eine Zahl ein (ratezahl). Wenn sie kleiner ist als die Zufallszahl, sagt das Programm »Die Zahl ist zu klein«. Wenn sie größer ist, sagt das Programm »Die Zahl ist zu groß«. In beiden Fällen wird anschließend die nächste Zahl eingegeben und geraten.
-
Wenn die Zahl richtig ist, gratuliert das Programm und ist beendet.
Alles klar? Los geht’s. Du brauchst eine while-Schleife und zwei if-Abfragen. Es werden etwa 10 Zeilen Programmcode benötigt. Bitte schau dir diese Lösung erst nach deinem eigenen Versuch an:
import random
zufallszahl = random.randint(1,100)
ratezahl = 0
while ratezahl != zufallszahl:
ratezahl = input("Rate die Zahl:")
if ratezahl > zufallszahl:
print ratezahl,"ist zu groß."
elif ratezahl < zufallszahl:
print ratezahl,"ist zu klein."
print "Glückwunsch,",zufallszahl,"ist die richtige Zahl!"
Hast du es selbst geschafft? Dein Programm muss natürlich nicht identisch aussehen, oft gibt es viele verschiedene Wege, um erfolgreich zum Ziel zu kommen. Am Anfang löst man manche Probleme noch etwas umständlicher, später sucht man automatisch die kürzeste und einfachste Lösung. Aber solange das Programm sicher funktioniert, ist es in Ordnung!
Das hier vorgeschlagene Programm ist sehr einfach: In der zweiten Zeile wird die Zufallszahl zwischen 1 und 100 ausgedacht und in der Variable zufallszahl gespeichert. Außerdem wird die Variable ratezahl definiert und am Anfang auf 0 gesetzt, damit die while-Schleife gestartet wird.
Und die while-Schleife folgt als Nächstes. Die Befehle darunter werden solange ausgeführt, wie ratezahl UNGLEICH (!=) zufallszahl ist – also solange die richtige Lösung nicht gefunden wurde. Da die Ratezahl am Anfang 0 ist, kann sie nicht gleich der Zufallszahl (zwischen 1 und 100) sein, also werden die Befehle in der while-Schleife beim ersten Mal auf jeden Fall ausgeführt.
Nun wird geraten, es wird eine Zahl eingegeben und in ratezahl gespeichert. Damit das Programm mitteilen kann, ob die Zahl zu groß oder zu klein ist, braucht es zwei if-Abfragen, die dann mitteilen, ob die geratene Zahl zu groß oder zu klein ist. Die dritte Möglichkeit, dass die Zahl genau stimmt, braucht nicht per if-Abfrage geprüft werden, denn wenn dieser Fall eingetreten ist, beendet sich automatisch die while-Schleife, und die letzte Zeile des Programms wird ausgeführt.
Nach den beiden if-Abfragen kehrt das Programm zum while-Befehl zurück und prüft dort erneut, ob die ratezahl falsch ist. Wenn ja, dann wird der while-Block erneut ausgeführt und eine neue ratezahl eingegeben. Wenn nein (also die eingegebene Zahl ist definitiv richtig geraten), dann wird der Block unter while übersprungen, und das Programm geht endlich in die letzte Zeile, wo zur richtigen Lösung gratuliert wird.
Alles klar?
Abbildung 10.6 Durch Herantasten kommt man an die richtige Lösung.
Das Programm kann man natürlich noch etwas ausbauen. Wie wäre es mit einem Zähler, der die Anzahl der Rateversuche zählt? Am Schluss erfährt man, wie viele Versuche man gebraucht hat. Kein Problem, oder?
Aufgabe
Ändere das Programm ab, sodass es die Anzahl der Versuche mitzählt. Führe dazu die Variable zaehler ein, die am Anfang auf 0 gesetzt und bei jeder Eingabe um eins erhöht wird.
Ich nehme an, das hat geklappt. Dein Programm könnte jetzt in etwa so aussehen:
import random
zufallszahl = random.randint(1,100)
zaehler = 0
ratezahl = 0
while ratezahl != zufallszahl:
ratezahl = input("Rate die Zahl:")
zaehler = zaehler + 1
if ratezahl > zufallszahl:
print ratezahl,"ist zu groß."
if ratezahl < zufallszahl:
print ratezahl,"ist zu klein."
print "Glückwunsch,",zufallszahl,"ist die richtige Zahl!"
print "Du hast",zaehler,"Versuche gebraucht."
Abbildung 10.7 Nur vier Versuche – das ist wirklich gut!