import random import time def ziehung(): """Simuliert eine Lottoziehung und gibt die gezogenen Zahlen zurück.""" return sorted(random.sample(range(1, 50), 6)) def nutzer_tipp(): """Fragt den Nutzer nach seinem Tipp und gibt die Zahlen als Liste zurück.""" while True: try: tipp = input("Geben Sie Ihren Tipp (6 Zahlen zwischen 1 und 49, durch Kommas getrennt) ein: ") tipp_liste = [int(x.strip()) for x in tipp.split(',')] if len(tipp_liste) != 6 or not all(1 <= x <= 49 for x in tipp_liste): raise ValueError return sorted(tipp_liste) except ValueError: print("Ungültige Eingabe. Bitte geben Sie genau 6 gültige Zahlen ein.") def berechne_richtige(tipp, gezogene_zahlen): """Berechnet die Anzahl der richtigen Tipps.""" return len(set(tipp) & set(gezogene_zahlen)) def lottosimulation(anzahl_simulationen): """Führt die Lottosimulation durch und gibt die Ergebnisse aus.""" tipp = nutzer_tipp() ergebnisse = [0] * 7 # Index 0-6 für 0 bis 6 richtige Tipps start_time = time.time() for _ in range(anzahl_simulationen): gezogene_zahlen = ziehung() richtige = berechne_richtige(tipp, gezogene_zahlen) ergebnisse[richtige] += 1 end_time = time.time() laufzeit = end_time - start_time # Ausgabe der Ergebnisse print("\nErgebnisse der Simulation:") for i in range(7): relative_haeufigkeit = ergebnisse[i] / anzahl_simulationen * 100 print(f"{i} richtige Zahlen: {ergebnisse[i]} ({relative_haeufigkeit:.2f}%)") # Exakte Gewinnwahrscheinlichkeiten exakte_wahrscheinlichkeiten = [berechne_exakte_wahrscheinlichkeit(i) for i in range(7)] print("\nExakte Gewinnwahrscheinlichkeiten:") for i in range(7): abweichung = relative_haeufigkeit - exakte_wahrscheinlichkeiten[i] * 100 print(f"{i} richtige Zahlen: {exakte_wahrscheinlichkeiten[i] * 100:.6f}% (Abweichung: {abweichung:.2f}%)") print(f"\nLaufzeit der Simulation: {laufzeit:.4f} Sekunden") def berechne_exakte_wahrscheinlichkeit(richtige): """Berechnet die exakte Wahrscheinlichkeit für die Anzahl der richtigen Tipps.""" auswahl = 6 gesamt = 49 if richtige < 0 or richtige > 6: return 0 falsch = auswahl - richtige if falsch > 6: return 0 # Kombinationen berechnen kombinationen_richtig = comb(6, richtige) kombinationen_falsch = comb(43, falsch) # 43 = 49 - 6 gesamt_kombinationen = comb(49, 6) return (kombinationen_richtig * kombinationen_falsch) / gesamt_kombinationen def comb(n, k): """Berechnet die Kombinationen von n über k (n choose k).""" if k > n: return 0 if k == 0 or k == n: return 1 k = min(k, n - k) # Nutzen der Symmetrie numer = 1 denom = 1 for i in range(k): numer *= (n - i) denom *= (i + 1) return numer // denom if __name__ == "__main__": while True: try: anzahl_simulationen = int(input("Wie oft möchten Sie die Ziehung simulieren? ")) if anzahl_simulationen <= 0: raise ValueError break except ValueError: print("Bitte geben Sie eine positive ganze Zahl ein.") lottosimulation(anzahl_simulationen)