import random import matplotlib.pyplot as plt from math import prod # Anzahl der Schüler n = 21 # Anzahl der Experimente anzahl_experimente = 100 # Gewinnzahlen/Geburtstagsnummern von 1 bis maximale_gewinnzahl = 365 def wahrscheinlichkeit_mehrfach(tage, personen): return 1-prod(i/tage for i in range(tage-personen+1, tage+1)) liste_der_haeufigkeiten = [] # Speichert die Anzahl der Experimente, bei denen mindestens # zwei Leute dieselbe Gewinnzahl gewählt haben. anzahl_gewinnzahl_mehrfach = 0 for nummer_experiment in range(anzahl_experimente): menge_gewinnzahlen = set(random.randrange(1, maximale_gewinnzahl+1) for i in range(n)) if len(menge_gewinnzahlen) < n: anzahl_gewinnzahl_mehrfach += 1 liste_der_haeufigkeiten.append(anzahl_gewinnzahl_mehrfach/(nummer_experiment+1)) plt.title(f"""Geburtstags-Simulation Anzahl der Personen: {n} Anzahl der möglichen Geburtstage/Gewinnzahlen: {maximale_gewinnzahl}""") plt.xlabel("Anzahl der Experimente") plt.ylabel("Häufigkeit mehrfacher Geburtstage") axis = plt.gca() axis.set_ylim([0, 1]) plt.yticks([i * 0.1 for i in range(11)]) p_theoretisch = wahrscheinlichkeit_mehrfach(maximale_gewinnzahl, n) print(f'Wahrscheinlichkeit für Mehrfachgeburtstag: {p_theoretisch}') plt.plot([0, anzahl_experimente], [p_theoretisch, p_theoretisch], color='black') if anzahl_experimente <= 100: plt.plot(liste_der_haeufigkeiten, color="blue", marker = "o", ms = 4, mfc = "red") elif anzahl_experimente <= 200: plt.plot(liste_der_haeufigkeiten, color="blue", marker = "o", ms = 2, mfc = "red") else: plt.plot(liste_der_haeufigkeiten, color = "blue") plt.show() # Zum Spass noch der Graph der Wahrscheinlichkeit für "Mehrfachgeburtstag" in Abhängigkeit von der Personenanzahl. liste_p = [wahrscheinlichkeit_mehrfach(maximale_gewinnzahl, anzahl_personen) for anzahl_personen in range(maximale_gewinnzahl+1)] plt.title(f"""Geburtstags-Simulation Anzahl der möglichen Geburtstage/Gewinnzahlen: {maximale_gewinnzahl}""") plt.xlabel("Anzahl der Personen") plt.ylabel("Wahrscheinlichkeit eines Mehrfachgeburtstags") axis = plt.gca() axis.set_ylim([0, 1]) # plt.yticks([i * 0.01 for i in range(11)]) plt.plot([0, maximale_gewinnzahl], [0.5, 0.5], color='black') links = max([i for i, p in enumerate(liste_p) if p <= 0.5]) plt.plot([links, links], [0, 1], color='black') plt.plot([links+1, links+1], [0, 1], color='black') print(f'Grösste Personenzahl mit Mehrfachgeburtstagswahrscheinlichkeit <= 0.5: {links}, zugehörige Wahrscheinlichkeit: {liste_p[links]}.') print(f'Grösste Personenzahl mit Mehrfachgeburtstagswahrscheinlichkeit > 0.5: {links+1}, zugehörige Wahrscheinlichkeit: {liste_p[links+1]}.') if maximale_gewinnzahl <= 100: plt.plot(liste_p, color="blue", marker = "o", ms = 4, mfc = "red") elif maximale_gewinnzahl <= 200: plt.plot(liste_p, color="blue", marker = "o", ms = 2, mfc = "red") else: plt.plot(liste_p, color = "blue") plt.show()