Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:glf20:programmieren:while-zahlenraten [2020/10/28 19:22] – [Zufallszahlen] Ivo Blöchliger | lehrkraefte:blc:informatik:glf20:programmieren:while-zahlenraten [2022/09/19 17:47] (current) – [Programmieren Sie das Rate-Spiel] Olaf Schnürer | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Zahlenraten: | ||
| + | <WRAP todo> | ||
| + | * 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 ===== | ||
| + | <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 | ||
| + | |||
| + | wurfel = "" | ||
| + | for i in range(50): | ||
| + | wurfel += "%d " % randrange(1, | ||
| + | |||
| + | 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), | ||
| + | |||
| + | <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 | ||
| + | # | ||
| + | | ||
| + | </ | ||