lehrkraefte:blc:informatik:glf20:programmieren:while-zahlenraten

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:glf20:programmieren:while-zahlenraten [2020/10/28 19:30]
Ivo Blöchliger
lehrkraefte:blc:informatik:glf20:programmieren:while-zahlenraten [2022/09/19 19:47] (current)
Olaf Schnürer [Programmieren Sie das Rate-Spiel]
Line 15: Line 15:
     * Was passiert am Schluss?     * Was passiert am Schluss?
  
 +{{ :lehrkraefte:blc:informatik:glf20:programmieren:screenshot_20201029_080723.jpg?direct&400 |}}
 ===== 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:
 <code  python> <code  python>
 from random import randrange  # Funktion randrange importieren from random import randrange  # Funktion randrange importieren
  
-wurfel = ""+wurfel = ""     # Für die Ausgabe auf einer Zeile
 for i in range(50): for i in range(50):
     wurfel += "%d " % randrange(1,7)  # Zufallszahl von 1 bis und mit 6     wurfel += "%d " % randrange(1,7)  # Zufallszahl von 1 bis und mit 6
Line 25: Line 30:
 print(wurfel) print(wurfel)
 </code> </code>
 +
 +Passen Sie das Programm so an, dass Roulette-Zahlen (0 bis und mit 36) oder Münzwürfe (0 oder 1) erzeugt werden.
 +</WRAP>
  
  
Line 30: Line 38:
 Bei einem for-loop sind die Anzahl Wiederholungen zu Beginn der Schleife festgelegt. 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. +Beim Rate-Spiel muss geraten werden (d.h. wiederholt), bis die Zahl gefunden wurde. In Python könnte das wie folgt aussehen:
  
 +<WRAP info>
 <code python> <code python>
 +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
 +</code>
 +</WRAP>
  
-zahl = 42   # Hier eine Zufallszahl mit randrange bestimmen+===== Programmieren Sie das Rate-Spiel ===== 
 +<WRAP todo> 
 +Starten Sie mit folgendem Skelett (Struktur des Programms ist gegeben, z.T. nur in Kommentaren, die Details in Python fehlen aber noch. 
 +<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("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)
  
 </code> </code>
 +</WRAP>
 +
 +===== 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:
 +<code python>
 +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
 +
 +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)/2 )
 +  versuche = versuche + 1
 +  
 +  # Den Benutzer diese Zahl fragen
 +  resultat = dialog("Ich rate %d" % raten)
 +  
 +  # Je nach resultat die Grenzen anpassen, oder Programm beenden.
 +  if resultat==0:  # Gefunden!
 +     gefunden = True
 +     print("Cool, der Computer hat die Zahl in %d Versuchen erraten" % versuche)
 +     
 +  elif resultat < 0:  #Geratene zahl war zu klein, also Grenzen anpassen
 +    # 
 +    #  TODO
 +    #
 +  else:   # Geratene Zahl war zu gross, also Grenzen anpassen
 +    #
 +    # TODO
 +    #
 +    
 +</code>
 +
  • lehrkraefte/blc/informatik/glf20/programmieren/while-zahlenraten.1603909826.txt.gz
  • Last modified: 2020/10/28 19:30
  • by Ivo Blöchliger