lehrkraefte:sbt:informatik-glf2-23-4

Simulation von Zufallexperimenten

Problemlösung durch Simulation

Beim Sammelbildproblem (auch: Sammler-Problem) stellt man sich die Frage, wie viele Sammelbilder man kaufen muss, um ein ganzes Album voll zu bekommen. Wir betrachten dazu das Beispiel der Panini Fussballbil- der.

Im Sammelalbum zu einer Fussball-Grossveranstaltung hat es insgesamt 680 Bilder. Ein Päckchen mit 5 Bildern kostet am Kiosk CHF 1.-. Alle Bilder sind gleich häufig. [^1]

Repititiere, was über die Arbeit mit Listen in Python bekannt ist.

Listenspielereien und print Befehle in Python2

Listenspielereien und print Befehle in Python2

listen.py
"""
 Wiederholung Listen in Python
"""
 
animals = ["Tiger", "Loewe", "Regenwurm"]
print(animals)
print("----- Bei uns gibt es {} Tiere.".format(len(animals)))
for animal in animals:
    print("   Es gibt {}".format(animal))
print("-----")
 
animals.append("Muecke")
print("----- Bei uns gibt es {} Tiere.".format(len(animals)))
for animal in animals:
    print("   Es gibt {}".format(animal))
print("-----")  
 
newAnimal = input("Neues Tier: ")
if newAnimal not in animals:
    animals.append(newAnimal)
else:
    print("Das hatten wir schon!")
print("----- Bei uns gibt es {} Tiere.".format(len(animals)))
for animal in animals:
    print("   Es gibt {}".format(animal))
print("-----")
 
animals.sort(reverse=True)
for animal in animals:
    print("   Es gibt {}".format(animal))
print("----- Bei uns gibt es {} Tiere.".format(len(animals)))
n = 2
print("Das {}. Tier der Liste ist {}".format(n+1, animals[n]))
 
 
vn = ["Paul","Heinrich","Karl-Wilhelm"]
nn = ["Ehrlich","Mai","Lange"]
 
for index in range(0,3): 
    print("Hallo {:>12} {:20}!".format(vn[index],nn[index]))
 
# Zuweisen von Werten zu LIsten
names = ['Raj', 'Shivam', 'Shreeya', 'Kartik']
marks = [7, 9, 8, 5]
div = ['A', 'A', 'C', 'B']
id = [21, 52, 27, 38]
 
# Ueberschrift ausgerichtet drucken
print("{:<10}{:_^10}{: ^10}{:>5}".format('Name', 'Marks', 'Division', 'ID'))
 
# Werte ausgerichtet drucken
for i in range(0, 4):
    print("{:<10}{:_^10}{: ^10}{:>5}".format(names[i], marks[i], div[i], id[i]))
 
# Liste generisch erzeugen
Zahl = 0
Anzahl = 100
DieListe=[Zahl]*Anzahl	    # erzeugt eine Liste gefüllt mit anzahl zahlen.
Laenge = len(DieListe)	            # gibt die Länge der Liste listenname zurück.
print("Generierte Liste:\n{}\nMit Länge: {}".format(DieListe, Laenge))

Rein hypothetisch: Wie viel kostet es, das Album zu füllen, falls man nie eine Karte doppelt erwischt?

Realistisch: Wieviele Bilder muss ein einzelner kaufen, um sein Album zu füllen? Schreibe dazu eine Simulation.

  • Du darfst die Vereinfachung machen, dass man die Bilder einzeln kaufen kann.
  • Beschreibe zuerst deine Idee, wie du den Computer das Problem simulieren lässt.
  • Schreibe eine Funktion sim, welche das Sammelbildproblem einmal simuliert und die Anzahl nötiger Bilder ausgibt.
  • Führe sim mehrmals durch und bestimme die durchschnittliche Anzahl nötiger Bildkäufe.

Lösungsvorschlag

Lösungsvorschlag

listen.py
"""
Simulation Sammelbilder
A2) Wieviele Bilder muss ein einzelner kaufen, um sein Album zu füllen?
"""
from random import randint
 
 
def sim():
    zaehler = 0
    Sammelliste = []
    while len(Sammelliste) < 680:
        einBildchen = randint(1, 681)
        if einBildchen in Sammelliste:
            zaehler += 1
        else:
            Sammelliste.append(einBildchen)
            zaehler += 1
    return zaehler
 
gesamtzahl = 0
anzahlSimulationen = 200
for index in range(0, anzahlSimulationen):
    x = sim()
    gesamtzahl += x
 
print("-------------------------------------------------")
print("Anzahl Käufe etwa: {:.0f} ({} Simulationen)".format(
    gesamtzahl/anzahlSimulationen, anzahlSimulationen))
 
 
# Optimiere die sim Funktion!

Mit Tausch: Wir gehen nun davon aus, dass zwei Freunde miteinander eifrig tauschen. Versuche auch dieses Problem zu simulieren. Wie stark verringert sich die Zahl der jeweils gekauften Bilder?

Überlege, wie das Problem simuliert werden kann.

Mit Tauschbörse: Versuche das Problem mit Tauschen auf mehr als 2 Personen auszudehnen. Wie viele Bilder müssen im Schnitt bei 50 Personen gekauft werden, welche perfekt miteinander tauschen?

Tipp

Tipp

Um das Problem effizient zu simulieren, kannst du ähnlich wie in Aufgabe 2 vorgehen, es wird jedoch jeweils solange gekauft, bis jedes Bild 50 mal vorkommt (dann haben alle ihr Album voll.

  • lehrkraefte/sbt/informatik-glf2-23-4.txt
  • Last modified: 2023/03/24 13:28
  • by Karlheinz Schubert