Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
lehrkraefte:blc:informatik:glf20:programmieren:while-zahlenraten [2020/10/28 19:28] Ivo Blöchliger created |
lehrkraefte:blc:informatik:glf20:programmieren:while-zahlenraten [2022/09/19 19:47] (current) Olaf Schnürer [Programmieren Sie das Rate-Spiel] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Zahlenraten: | ====== Zahlenraten: | ||
+ | <WRAP todo> | ||
* Bestimmen Sie im Kopf eine zufällige natürliche Zahl zwischen 1 und 100. | * 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. | * 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? | * In wie vielen Vesuchen kann die Zahl garantiert erraten 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), | + | |
===== Programmskizze ===== | ===== Programmskizze ===== | ||
Line 18: | Line 15: | ||
* Was passiert am Schluss? | * Was passiert am Schluss? | ||
+ | {{ : | ||
===== Zufallszahlen ===== | ===== Zufallszahlen ===== | ||
+ | <WRAP todo> | ||
+ | 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 | from random import randrange | ||
- | wurfel = "" | + | wurfel = "" |
for i in range(50): | for i in range(50): | ||
wurfel += "%d " % randrange(1, | wurfel += "%d " % randrange(1, | ||
Line 29: | Line 31: | ||
</ | </ | ||
+ | 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), | ||
+ | |||
+ | <WRAP info> | ||
+ | <code python> | ||
+ | gefunden = False # Die Zahl ist noch nicht gefunden | ||
+ | while not gefunden: | ||
+ | # Tu | ||
+ | # was (hier muss Code stehen, so meldet das Programm einen Fehler wegen leerer Schlaufe | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Programmieren Sie das Rate-Spiel ===== | ||
+ | <WRAP todo> | ||
+ | Starten Sie mit folgendem Skelett (Struktur des Programms ist gegeben, z.T. nur in Kommentaren, | ||
+ | <code python> | ||
+ | grenze = 100 | ||
+ | zahl = 42 # Hier eine Zufallszahl mit randrange zwischen 1 und grenze bestimmen | ||
+ | |||
+ | gefunden = False # Zahl schon erraten? | ||
+ | versuche = 0 # Anzahl Versuche | ||
+ | |||
+ | while not gefunden: | ||
+ | # Anzahl versuche um eins Erhöhen. | ||
+ | |||
+ | # Benutzer soll raten | ||
+ | raten = inputInt(" | ||
+ | | ||
+ | |||
+ | # Zahl gefunden? Also entsprechende Ausgabe, die Variable ' | ||
+ | # Sonst Ausgabe, ob zu gross oder zu klein | ||
+ | |||
+ | # Ende des Programms | ||
+ | print(" | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== 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 '' | ||
+ | <code python> | ||
+ | from entrydialog import * | ||
+ | |||
+ | def dialog(meldung): | ||
+ | knoepfe = [ButtonEntry(i) for i in (" | ||
+ | pane = EntryPane(meldung, | ||
+ | dlg = EntryDialog(450, | ||
+ | while not dlg.isDisposed(): | ||
+ | for i in range(3): | ||
+ | if knoepfe[i].isTouched(): | ||
+ | dlg.dispose() | ||
+ | return i-1 | ||
+ | |||
+ | unten = 1 # Kleinste noch mögliche Zahl | ||
+ | oben = 100 # Grössete noch mögliche Zahl | ||
+ | gefunden = False | ||
+ | versuche = 0 | ||
+ | |||
+ | # Raten solange die Zahl nicht gefunden wurde | ||
+ | while not gefunden: | ||
+ | # Zu erratende Zahl als Durchschnitt zwischen oben und unten, abgerundet auf eine Ganzzahl: | ||
+ | raten = int( (unten+oben)/ | ||
+ | versuche = versuche + 1 | ||
+ | | ||
+ | # Den Benutzer diese Zahl fragen | ||
+ | resultat = dialog(" | ||
+ | | ||
+ | # Je nach resultat die Grenzen anpassen, oder Programm beenden. | ||
+ | if resultat==0: | ||
+ | | ||
+ | | ||
+ | |||
+ | elif resultat < 0: #Geratene zahl war zu klein, also Grenzen anpassen | ||
+ | # | ||
+ | # TODO | ||
+ | # | ||
+ | else: # Geratene Zahl war zu gross, also Grenzen anpassen | ||
+ | # | ||
+ | # TODO | ||
+ | # | ||
+ | | ||
+ | </ | ||