Czytelnicy tacy jak ty pomagają wspierać MUO. Kiedy dokonujesz zakupu za pomocą linków na naszej stronie, możemy otrzymać prowizję partnerską. Czytaj więcej.

Jeśli jesteś dzieckiem z lat 70., być może dorastałeś, oglądając popularny teleturniej Let's Make a Deal. Od tego czasu ludzie żywo dyskutują o zagadce Monty Hall i dobrze się bawią, odtwarzając ją. Zadziwiające napięcie i dramat, jakie tworzy się, gdy zawodnik wybiera jedne z trojga drzwi, za każdym razem jest zabawne do oglądania.

Korzystając z matematyki i odrobiny programowania, zbudujesz symulator Monty Hall w języku Python. Dzięki temu będziesz mógł raz na zawsze zdecydować, że zamiana drzwi zwiększy Twoje szanse na wygraną.

Na czym polega problem Monty'ego Halla?

Problem Monty'ego Halla to łamigłówka nazwana na cześć gospodarza teleturnieju, Monty'ego Halla. Jest troje drzwi, z których tylko jedna zawiera upragnioną nagrodę. Gdy wybierzesz drzwi, Monty — kto wie, co jest za nimi — otwiera kolejne drzwi, odsłaniając kozę. Masz teraz możliwość pozostania przy pierwotnej decyzji lub przejścia do innych drzwi.

instagram viewer

Ze względu na swój zaskakujący i nieprzewidywalny charakter puzzle Monty Hall cieszą się dużą popularnością. Chociaż dotyczy prawdopodobieństwa, rozwiązanie przeczy intuicji. Służy jako doskonała demonstracja tego, jak mylące mogą być obliczenia prawdopodobieństwa. Zagadka uczy nas, jak ignorować wrażenia z pozornie przypadkowych zdarzeń i zamiast tego skupiać się na rozumowaniu i faktach.

Moduły Random i Tkinter

Aby zbudować symulację Monty Hall w Pythonie, zacznij od modułów Random i Tkinter.

Istnieje kilka funkcji do tworzenia liczb losowych w module Random. Możesz użyć tych algorytmów do generowania przetasowanych sekwencji, ruchów w grze i pseudolosowych liczb całkowitych. Jest często używany m.in gry takie jak krykiet ręczny, Lub prosty test pisania, a także symulować rzuty kośćmi i przetasować listy.

Tkinter jest domyślną biblioteką GUI dla Pythona. Używając go, możesz budować fantastyczne aplikacje GUI. Możesz stworzyć aplikację z listą rzeczy do zrobienia, edytor tekstu lub prosty kalkulator. Możesz wykorzystać swoją wiedzę w praktyce i doskonalić swoje umiejętności programistyczne, używając Pythona i Tkintera, aby tworzyć podstawowe aplikacje komputerowe.

Otwórz terminal i uruchom następujące polecenie, aby dodać Tkinter do swojego systemu:

pip zainstaluj tkintera

Jak zbudować symulator Monty Hall za pomocą Pythona

W tym można znaleźć kod źródłowy Monty Hall Simulator Repozytorium GitHub.

Zaimportuj moduły random i Tkinter. Funkcja StringVar ułatwia kontrolowanie wartości widżetu, takiego jak etykieta lub wpis. Możesz użyć etykiety, aby wyświetlić tekst na ekranie i wpisu, aby pobrać dane wprowadzone przez użytkownika.

Zainicjuj instancję Tkinter i wyświetl okno główne. Ustaw wymiary okna na 600 pikseli szerokości i 200 pikseli wysokości za pomocą geometria() metoda. Ustaw odpowiedni tytuł okna i zablokuj zmianę jego rozmiaru.

import losowy
z tkinter import StringVar, Etykieta, Tk, Wpis

okno = Tk()
okno.geometry("600x200")
tytuł okna („Symulacja Monty'ego Halla”)
okno.o zmiennym rozmiarze(0, 0)

Następnie skonfiguruj dwie pary widżetów i zmiennych do przechowywania wyników symulacji. Twoja aplikacja poprosi o wykonanie kilku uruchomień. Podczas każdego biegu będzie symulować grę i zapisywać wynik w każdym przypadku: czy gracz zdecyduje się na zmianę, czy pozostanie przy tym samym wyborze.

Używając StringVar(), ustaw początkowe wartości tego samego wyboru i przełącz wybór na 0. Zdefiniuj widżet Wpis i ustaw jego rozmiar czcionki na 5. Zadeklaruj dwie etykiety, aby wyświetlały to samo i przełączony wybór i umieść je. Zadeklaruj jeszcze dwie etykiety, które będą wyświetlać wartości zdefiniowanych wcześniej zmiennych. Na koniec umieść widżet Wpis pod tymi czterema etykietami.

ten sam_wybór = StringVar()
przełączany_wybór = StringVar()
ten sam_wybór.set(0)
przełączany_wybór.set(0)
no_sample = Wpis (czcionka=5)

Etykieta (tekst=„Ten sam wybór”).miejsce (x=230, y=58)
Etykieta (tekst=„Zmieniony wybór”).miejsce (x=230, y=90)
Etykieta (zmienna tekstowa=ten sam_wybór, czcionka=(50)).miejsce (x=350, y=58)
Etykieta (textvariable=switched_choice, font=(50)).miejsce (x=350, y=90)
brak_próbki.miejsce (x=200, y=120)

Zdefiniuj funkcję, symulować. Zainicjuj zmienne wynikowe i uzyskaj przykładową wartość wprowadzoną przez użytkownika. Zadeklaruj listę zawierającą przedmioty, które ujawnią drzwi.

W każdym biegu sporządź zduplikowaną listę oryginalnych drzwi i przetasuj ją w losowej kolejności. Wybierz losowe drzwi i usuń je — symuluje to wybór gracza. Następnie zasymuluj ujawnienie Monty'ego: jeśli pierwsze drzwi nie zawierają nagrody, otwórz je, w przeciwnym razie otwórz drugie drzwi. Usuń ten wybór i pozostaw pozostałe drzwi jako opcję przełączenia.

poksymulować(wydarzenie):
ten sam_wynik_wyboru = 0
przełączany_wynik_wyboru = 0
próbki = int (no_sample.get())
drzwi = ["złoto", "koza", "koza"]

Do _ W zakres (próbki):
symulowane_drzwi = drzwi.kopia()
random.shuffle (symulowane_drzwi)
pierwszy_wybór = losowy.wybór (symulowane_drzwi)
symulowane_drzwi.usuń (pierwszy_wybór)
otwarte_drzwi = symulowane_drzwi[0] Jeśli symulowane_drzwi[0] != "złoto"w przeciwnym razie symulowane_drzwi[1]
symulowane_drzwi.usuń (otwarte_drzwi)
przełączony_drugi_wybór = symulowane_drzwi[0]

Jeśli pierwszy wybór zawiera pożądaną nagrodę, zwiększ ten sam wynik wyboru o jeden i odzwierciedl go na ekranie. W przeciwnym razie wykonaj tę samą operację dla przełączanego wyboru.

Jeśli pierwszy_wybór == "złoto":
ten sam_wynik_wyboru += 1
ten sam_wybór.set (ten sam_wynik_wyboru)
Elif przełączany_drugi_wybór == "złoto":
przełączany_wynik_wyboru += 1
przełączany_wybór.set (przełączany_wybór_wynik)

Ważnym krokiem jest powiązanie klawisza Enter ze zdarzeniem w oknie Tkintera. Takie postępowanie zapewnia, że ​​gdy gracz naciska Wchodzić, zostanie uruchomiona określona funkcja. Aby to osiągnąć, zdaj string i funkcję symulacji jako parametry do wiązać() funkcjonować.

The główna pętla() mówi Pythonowi, aby uruchomił pętlę zdarzeń Tkinter i nasłuchiwał zdarzeń (takich jak naciśnięcia przycisków), dopóki nie zamkniesz okna.

no_sample.bind("", symulować)
okno.pętla główna()

Złóż to wszystko razem i uruchom program, aby zasymulować układankę w akcji.

Dane wyjściowe symulatora Monty Hall przy użyciu Pythona

Po uruchomieniu programu zobaczysz proste okno z etykietami wyboru Same i Switched. Wprowadź numer próbki w polu na dole, aby wyświetlić symulowane wyniki. W tej próbce 3 przebiegów program pokazuje, że wygrywa raz z tym samym wyborem i dwukrotnie z przełącznikiem.

Te wyniki są losowe, ale możesz uruchomić symulację z większą próbką, aby uzyskać większą dokładność. W poniższej próbie o wielkości 100 wybór z zamianą wygrywa 65 razy.

Rozwiązywanie problemów za pomocą programowania

Symulator Monty Hall jest doskonałą demonstracją tego, jak można wykorzystać programowanie do rozwiązywania rzeczywistych problemów. Możesz opracować różne algorytmy i trenować modele do wykonywania określonych zadań, takich jak sortowanie tablicy lub poprawa wydajności systemu w celu uzyskania optymalnej produkcji.

Różne języki programowania oferują różne możliwości i funkcje ułatwiające programowanie. Korzystając z Pythona, możesz tworzyć modele, które mogą przewidywać przyszłe wartości zestawu danych z większą dokładnością. Co więcej, możesz zautomatyzować powtarzalne operacje, zmniejszyć nudną pracę oraz poprawić szybkość i dokładność.