Wenn Sie ein Kind der 70er Jahre sind, sind Sie vielleicht mit der beliebten Spielshow Let's Make a Deal aufgewachsen. Seitdem diskutieren die Leute lebhaft über das Monty-Hall-Puzzle und haben Spaß daran, es zu replizieren. Die verblüffende Spannung und das Drama, das entsteht, wenn der Kandidat eine der drei Türen auswählt, macht jedes Mal Spaß.
Mit Mathematik und ein bisschen Programmieren wirst du einen Monty-Hall-Simulator mit Python bauen. Auf diese Weise können Sie ein für alle Mal entscheiden, dass das Wechseln der Türen Ihre Gewinnchancen erhöht.
Was ist das Monty-Hall-Problem?
Das Monty-Hall-Problem ist ein Denksportspiel, das nach dem Gameshow-Moderator Monty Hall benannt ist. Es gibt drei Türen, von denen nur eine einen gewünschten Preis enthält. Sobald Sie eine Tür ausgewählt haben, öffnet Monty – wer weiß, was sich dahinter verbirgt – eine weitere Tür und enthüllt eine Ziege. Sie haben nun die Möglichkeit, bei Ihrer ursprünglichen Entscheidung zu bleiben oder zur anderen Tür zu wechseln.
Aufgrund seiner überraschenden und unvorhersehbaren Natur ist das Monty-Hall-Puzzle sehr beliebt. Obwohl es sich um Wahrscheinlichkeiten handelt, widerspricht die Lösung der Intuition. Es dient als hervorragende Demonstration dafür, wie verwirrend Wahrscheinlichkeitsberechnungen sein können. Das Rätsel lehrt uns, Eindrücke von scheinbar zufälligen Ereignissen zu ignorieren und uns stattdessen auf Argumente und Fakten zu konzentrieren.
Die Random- und Tkinter-Module
Um eine Monty-Hall-Simulation in Python zu erstellen, beginnen Sie mit den Modulen Random und Tkinter.
Im Random-Modul gibt es mehrere Funktionen, um Zufallszahlen zu erzeugen. Sie können diese Algorithmen verwenden, um gemischte Sequenzen, Spielbewegungen und pseudozufällige ganze Zahlen zu generieren. Es wird häufig in verwendet Spiele wie Handcricket, oder ein einfacher Schreibtest, sowie um Würfelwürfe zu simulieren und Listen zu mischen.
Tkinter ist die Standard-GUI-Bibliothek für Python. Damit können Sie fantastische GUI-Anwendungen erstellen. Sie können eine To-do-Listen-App, einen Texteditor oder einen einfachen Taschenrechner erstellen. Sie können Ihr Wissen in die Praxis umsetzen und Ihre Programmierkenntnisse mit Python und Tkinter verbessern, um grundlegende Desktop-Apps zu erstellen.
Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus, um Tkinter zu Ihrem System hinzuzufügen:
pip installiere tkinter
So erstellen Sie einen Monty Hall-Simulator mit Python
Darin finden Sie den Quellcode des Monty Hall Simulators GitHub-Repository.
Importieren Sie die Module random und Tkinter. Die StringVar-Funktion erleichtert die Steuerung des Werts eines Widgets wie einer Bezeichnung oder eines Eintrags. Sie können ein Label verwenden, um Text auf dem Bildschirm anzuzeigen, und einen Eintrag, um Benutzereingaben abzurufen.
Initialisieren Sie die Tkinter-Instanz und zeigen Sie das Root-Fenster an. Stellen Sie die Abmessungen des Fensters mithilfe von auf 600 Pixel Breite und 200 Pixel Höhe ein Geometrie() Methode. Legen Sie einen geeigneten Fenstertitel fest und verbieten Sie dessen Größenänderung.
importieren willkürlich
aus tkinter importieren StringVar, Label, Tk, Eintrag
Fenster = Tk()
Fenster.Geometrie ("600 x 200")
Fenster.Titel ("Monty-Hall-Simulation")
window.resizable(0, 0)
Richten Sie als Nächstes zwei Paare von Widgets und Variablen ein, um die Simulationsergebnisse zu speichern. Ihre App fordert Sie auf, eine Reihe von Läufen abzuschließen. Bei jedem Durchlauf simuliert es das Spiel und zeichnet jeweils das Ergebnis auf: ob sich der Spieler für einen Wechsel entscheidet oder bei der gleichen Wahl bleibt.
Setzen Sie mit StringVar() die Anfangswerte derselben Auswahl und schalten Sie die Auswahl auf 0. Definieren Sie ein Eingabe-Widget und stellen Sie seine Schriftgröße auf 5 ein. Deklarieren Sie zwei Beschriftungen, um dasselbe und die umgeschaltete Auswahl anzuzeigen, und positionieren Sie sie. Deklarieren Sie zwei weitere Beschriftungen, die den Wert der zuvor definierten Variablen anzeigen. Positionieren Sie schließlich das Eingabe-Widget unter diesen vier Beschriftungen.
same_choice = StringVar()
switched_choice = StringVar()
same_choice.set(0)
switched_choice.set(0)
no_sample = Eintrag (font=5)
Bezeichnung (text="Gleiche Wahl").Stelle (x=230, y=58)
Bezeichnung (text="Umgeschaltete Wahl").Stelle (x=230, y=90)
Bezeichnung (Textvariable=gleiche_Auswahl, Schriftart=(50)).Stelle (x=350, y=58)
Label (textvariable=switched_choice, font=(50)).Stelle (x=350, y=90)
no_sample.place (x=200, y=120)
Funktion definieren, simulieren. Initialisieren Sie die Ergebnisvariablen und erhalten Sie den vom Benutzer eingegebenen Beispielwert. Deklarieren Sie eine Liste mit den Gegenständen, die die Türen offenbaren.
Erstellen Sie in jedem Durchlauf eine doppelte Liste der Originaltüren und mischen Sie sie in zufälliger Reihenfolge. Wählen Sie eine zufällige Tür und entfernen Sie sie – dies simuliert die Wahl des Spielers. Simulieren Sie dann Montys Enthüllung: Wenn die erste Tür den Preis nicht enthält, öffnen Sie sie, andernfalls öffnen Sie die zweite Tür. Entfernen Sie diese Auswahl und lassen Sie die verbleibende Tür als Option zum Wechseln.
defsimulieren(Fall):
same_choice_result = 0
switched_choice_result = 0
Proben = int (no_sample.get())
Türen = ["Gold", "Ziege", "Ziege"]
für _ In Bereich (Beispiele):
Simulierte_Türen = Türen.Kopie()
random.shuffle (simulierte_türen)
first_choice = random.choice (simulierte_Türen)
Simulierte_Türen.remove (erste_Wahl)
open_door = simulierte_türen[0] Wenn simulierte_türen[0] != "Gold"anders simulierte_türen[1]
Simulierte_Türen.remove (geöffnete_Tür)
geschaltete_zweite_wahl = simulierte_türen[0]
Wenn die erste Wahl den gewünschten Preis enthält, erhöhen Sie das gleiche Wahlergebnis um eins und geben Sie es auf dem Bildschirm wieder. Führen Sie andernfalls denselben Vorgang für die umgeschaltete Auswahl aus.
Wenn first_choice == "Gold":
same_choice_result += 1
same_choice.set (same_choice_result)
elf geschaltete_zweite_wahl == "Gold":
switched_choice_result += 1
switched_choice.set (switched_choice_result)
Ein wichtiger Schritt besteht darin, die Eingabetaste mit einem Ereignis im Tkinter-Fenster zu verknüpfen. Dadurch wird sichergestellt, dass, wenn der Spieler drückt Eingeben, wird eine bestimmte Funktion ausgeführt. Um dies zu erreichen, übergeben Sie die
Der Hauptschleife() Die Funktion weist Python an, die Tkinter-Ereignisschleife auszuführen und auf Ereignisse (z. B. Tastendrücke) zu warten, bis Sie das Fenster schließen.
no_sample.bind("" , simulieren)
window.mainloop()
Setzen Sie alles zusammen und führen Sie Ihr Programm aus, um das Puzzle in Aktion zu simulieren.
Ausgabe von Monty Hall Simulator mit Python
Beim Ausführen des Programms sehen Sie ein einfaches Fenster mit den Auswahlbeschriftungen Same und Switched. Geben Sie eine Probennummer in das Feld unten ein, um simulierte Ergebnisse anzuzeigen. In diesem Beispiel von 3 Läufen zeigt das Programm, dass es einmal mit derselben Wahl und zweimal mit einem Schalter gewinnt.
Diese Ergebnisse sind zufällig, aber Sie können die Simulation für mehr Genauigkeit mit einer größeren Stichprobengröße ausführen. Bei der folgenden Stichprobengröße von 100 gewinnt die umgeschaltete Auswahl 65 Mal.
Probleme lösen mit Programmierung
Der Monty-Hall-Simulator ist eine hervorragende Demonstration, wie Sie mithilfe von Programmierung reale Probleme lösen können. Sie können verschiedene Algorithmen entwickeln und Modelle trainieren, um bestimmte Aufgaben wie das Sortieren eines Arrays oder das Verbessern der Effektivität eines Systems für eine optimale Produktion auszuführen.
Verschiedene Programmiersprachen bieten unterschiedliche Fähigkeiten und Funktionen, um die Programmierung zu vereinfachen. Mit Python können Sie Modelle erstellen, die die zukünftigen Werte eines Datensatzes mit höherer Genauigkeit vorhersagen können. Darüber hinaus können Sie sich wiederholende Vorgänge automatisieren, langweilige Arbeiten verringern und die Geschwindigkeit und Genauigkeit verbessern.