This is an old revision of the document!
Zahlenraten: Wiederholungen mit while
- Bestimmen Sie im Kopf eine zufällige natürliche Zahl zwischen 1 und 100.
- Ihr Nachbar soll die Zahl erraten. Sie dürfen nur sagen, ob die gesuchte Zahl grösser oder kleiner ist, oder die Zahl gefunden wurde.
- In wie vielen Vesuchen kann die Zahl garantiert erraten werden?
Programmskizze
Wir machen eine Übersicht der folgenden Elemente:
- Welche Werte müssen gespeichert werden, wie sollen die Variablen heisen?
- Wie ist genau der Ablauf vom Programm?
- Was geschieht genau einmal am Anfang?
- Welche Schritte werden wiederholt?
- Was passiert am Schluss?
Zufallszahlen
Python kann Zufallszahlen erzeugen. Dafür muss die entsprechende Funktion importiert (d.h. verfügbar gemacht) werden.
Testen und verstehen Sie folgendes Programm:
from random import randrange # Funktion randrange importieren wurfel = "" # Für die Ausgabe auf einer Zeile for i in range(50): wurfel += "%d " % randrange(1,7) # Zufallszahl von 1 bis und mit 6 print(wurfel)
Passen Sie das Programm so an, dass Roulette-Zahlen (0 bis und mit 36) oder Münzwürfe (0 oder 1) erzeugt werden.
while-loop
Bei einem for-loop sind die Anzahl Wiederholungen zu Beginn der Schleife festgelegt.
Beim Rate-Spiel muss geraten werden (d.h. wiederholt), bis die Zahl gefunden wurde. In Python könnte das wie folgt aussehen:
gefunden = False # Die Zahl ist noch nicht gefunden while not gefunden: # Solange nicht gefunden, wiederholen # Tu # was (hier muss Code stehen, so meldet das Programm einen Fehler wegen leerer Schlaufe
Programmieren Sie das Rate-Spiel
Starten Sie mit folgendem Skelett (Struktur des Programms ist gegeben, z.T. nur in Kommentaren, die Details in Python fehlen aber noch.
grenze = 100 zahl = 42 # Hier eine Zufallszahl mit randrange zwischen 1 und granze bestimmen gefunden = False # Zahl schon erraten? versuche = 0 # Anzahl Versuche while not gefunden: # Anzahl versuche um eins Erhöhen. # Benutzer soll raten raten = inputInt("Versuch %d: Zahl zwischen 1 und %d erraten:" % (versuche, grenze)) # Zahl gefunden? Also entsprechende Ausgabe, die Variable 'gefunden' auf True setzen # Sonst Ausgabe, ob zu gross oder zu klein # Ende des Programms print("Die Zahl wurde in %d Versuchen erraten!" % versuche)
Der Computer soll raten
Programmieren Sie ein Programm, das die Zahl erraten kann. Damit man dem Computer bequem mitteilen kann, ob die gesuchte Zahl kleiner, gefunden oder grösser ist, stelle ich folgende Funktion dialog
zur Verfügung, die -1 (kleiner), 0 (gefunden) oder +1 (grösser) liefert:
from entrydialog import * def dialog(meldung): knoepfe = [ButtonEntry(i) for i in ("kleiner", "GEFUNDEN!", "grösser")] pane = EntryPane(meldung, *knoepfe) dlg = EntryDialog(450, 200, pane) while not dlg.isDisposed(): for i in range(3): if knoepfe[i].isTouched(): dlg.dispose() return i-1 # Zum Testen: resultat = dialog("Ich rate 50") if resultat<0: print("Es wurde kleiner gedrückt") elif resultat==0: print("Es wurde GEFUNDEN gedrÜckt") else: print("Es wurde grösser gedrückt")