Table of Contents

Aufgaben

Aufgabe 1

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:

  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?

Aufgabe 2

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:

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

Aufgabe 3 (*)

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:

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

Vergleichsoperatoren

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")