lehrkraefte:blc:informatik:ffprg1-2019:loops-and-conditionals

Aufgaben

Programmieren Sie das Zahlenrate-Spiel. Der Computer generiert eine (ganze) Geheimzahl zwischen 1 und 100.

import random
geheim = random.randint(1,100)  # Ganzzahl zwischen 1 und 100 (inklusive, was ich ziemlich inkonsistent finde)

Der Benutzer darf dann die Zahl erraten. Der Computer meldet:

  • ob die Zahl stimmt und gibt die Anzahl benötigter Versuche aus.
  • oder ob die geratene Zahl zu gross oder zu klein ist.
  1. Programmieren Sie das Spiel
  2. (*) Was ist wohl die optimale Strategie, um die Zahl mit möglichst wenig Versuchen zu erraten?
  3. (* *) Können Sie ein Programm schreiben, das die durchschnittliche Anzahl Versuche ermittelt, die nötig sind?
  4. (* * *) Können Sie ein Programm schreiben, das alle optimalen Strategien berechnet?

Wurzeln nur mit Grundoperationen bestimmen. Schreiben Sie eine Funktion, die als Argument eine Zahl x erhält, und eine Schätzung für die Wurzel zurückliefert:

def wurzel(x):
  # Magic here
  # Schätzung für Wurzel aus x in w speichern
  return w  # Resultat zurückgeben 
 
n = 2
w = wurzel(n)
print "Wurzel %d ~ %f, (quadriert ~ %f)" % (n, w, w*w)

Starten Sie mit einer beliebigen Schätzung w und berechnen Sie x/w. Das eine ist grösser als die Wurzel, das andere kleiner. Sei die neue Schätzung der Durchschnitt der beiden Zahlen. Wiederholen Sie:

  • eine fixe Anzahl mal (z.B. 10 oder 20).
  • bis sich das Quadrat um weniger als z.B. 0.000001 unterscheidet (geben Sie auch die Anzahl nötiger Schritte aus).
  • bis sich die Schätzung nicht mehr ändert (geben Sie auch die Anzahl nötiger Schritte aus).

Testen Sie die Varianten ausführlich mit diversen Grössenordnungen von Radikanden.

Schreiben Sie eine Funktion variationen, das alle möglichen Wörten mit 3 gegebenen Buchstaben ausgibt. Z.B. gibt variationen(“ABC”) folgendes aus:

AAA AAB AAC ABA ABB ABC ACA ACB ACC BAA BAB BAC BBA BBB BBC BCA BCB BCC CAA CAB CAC CBA CBB CBC CCA CCB CCC

Für Fortgeschrittene:

  • (* * *)Schreiben Sie eine Funktion, die für beliebige viele unterschiedliche Buchstaben funktioniert.
  • (* * *) Schreiben Sie eine Funktion, die alle Permutationen liefert (jeder Buchstabe kommt nur genau einmal in jedem Wort vor).

Hilfestellungen

Hilfestellungen

Die Funktion ruft sich selbst auf, jeweils mit den noch zu vergebenen Buchstaben, und einem Wort, das schon teilweise aufgebaut ist.

Ist das teilweise aufgebaute Wort vollständig, wird es ausgegeben.

Andernfalls, wird das teilweise aufgebaute Wort um je einen der möglichen Buchstaben erweitert und für jede Erweiterung die Funktion wieder selbst aufgerufen.

True und False

Das Resultat eines Vergleichs ist True (wahr) oder False (falsch). Wahrheitswerte können mit

  • and, or und not verknüpft werden.
  • ^ steht für xor (entweder oder) (es könnte auch != (ungleich) verwendet werden)

Vergleichsoperatoren

  • == (Gleichheit)
  • <, ⇐, >=, > (Kleiner, kleiner gleich, grösser gleich, grösser)

For-Schleife (Anzahl Wiederholungen bekannt, inkl. Laufvariable)

for i in range(10):
  print i   # Gibt Zahlen von 0 bis und mit 9 aus.
 
for i in range(10,20):
  print i   # Gibt Zahlen von 10 bis und mit 19 aus.

for i in range(30,100,3):

print i   # Gibt Zahlen in 3er-Schritten von 30 bis und mit 99 aus

for i in (2,3,5,7,11,13,17):

print i   # Gibt die Zahlen in der Liste aus

</code>

While-Schlaufe (Anzahl Wiederholungen typischerweise unbekannt)

z = 1000
w = 1
while w*w<z:  # Wiederholen, so lange wie eine Bedingung wahr ist (ACHTUNG: Wird oft invertiert!)
  w+=1
print "Wurzel %d liegt zwischen %d und %d" % (z, w-1, w)

Lösungsvorschläge

Lösungsvorschläge

Lösungsvorschläge

def permutationen(s, prefix=""):
    if s=="":
        print prefix
    else:
        for i in range(len(s)):
            permutationen(s[0:i]+s[i+1:len(s)], prefix+s[i])
 
 
def variationen(s, prefix=""):
    if len(s)==len(prefix):
        print prefix
    else:
        for i in range(len(s)):
            variationen(s,prefix+s[i])
 
permutationen("ABC")
variationen("ABC")
  • lehrkraefte/blc/informatik/ffprg1-2019/loops-and-conditionals.txt
  • Last modified: 2019/02/19 16:38
  • by Ivo Blöchliger