lehrkraefte:sbt:informatik-glf2-23-4

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
lehrkraefte:sbt:informatik-glf2-23-4 [2023/03/24 12:27] Karlheinz Schubertlehrkraefte:sbt:informatik-glf2-23-4 [2023/03/24 12:28] (current) Karlheinz Schubert
Line 1: Line 1:
 +====== Simulation von Zufallexperimenten ======
 +===== Sammelbilderproblem =====
 +
 +Problemlösung durch Simulation
 +
 +<WRAP center round todo>
 +==== Das Problem ====
 +
 +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.
 +
 +==== Annahmen ====
 +
 +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.
 +
 +<hidden Listenspielereien und print Befehle in Python2>
 +<code python 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))
 +
 +</code>
 +</hidden>
 +</WRAP>
 +
 +<WRAP center round todo>
 +==== 1. Aufgabe ====
 +
 +Rein hypothetisch: Wie viel kostet es, das Album zu füllen, falls man nie eine Karte doppelt erwischt?
 +   
 +</WRAP>
 +<WRAP center round todo>
 +==== 2. Aufgabe ====
 +
 +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.
 +
 +<hidden Lösungsvorschlag>
 +<code python 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!
 +</code>
 +</hidden>
 +</WRAP>
 +<WRAP center round todo>
 +==== 3. Aufgabe ==== 
 +
 +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.
 +</WRAP>
 +<WRAP center round todo>
 +==== 4. Aufgabe ====
 +   
 +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?
 +
 +<hidden 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.
 +</hidden>
 +</WRAP>