Cititorii ca tine ajută la sprijinirea MUO. Când efectuați o achiziție folosind link-uri de pe site-ul nostru, este posibil să câștigăm un comision de afiliat. Citeşte mai mult.

Dacă ești un copil din anii 70, s-ar putea să fi crescut urmărind popularul show de jocuri, Let's Make a Deal. De atunci, oamenii discută în mod viu puzzle-ul Monty Hall și se distrează replicându-l. Suspansul și drama uluitoare create în timp ce concurentul alege una dintre cele trei uși este distractiv de urmărit de fiecare dată.

Folosind matematică și puțină programare, veți construi un simulator Monty Hall folosind Python. Folosind aceasta, vei putea decide odată pentru totdeauna că schimbarea ușilor îți crește șansele de câștig.

Care este problema Monty Hall?

Problema Monty Hall este un teaser numit după gazda emisiunii, Monty Hall. Există trei uși, dintre care doar una conține un premiu dorit. Odată ce ai ales o ușă, Monty - cine știe ce este în spatele lor - deschide o altă ușă, dezvăluind o capră. Acum aveți opțiunea de a rămâne cu decizia inițială sau de a trece la cealaltă ușă.

instagram viewer

Datorită naturii sale surprinzătoare și imprevizibile, puzzle-ul Monty Hall este foarte popular. Deși se ocupă de probabilități, soluția sfidează intuiția. Acesta servește ca o demonstrație excelentă a cât de confuze pot fi calculele de probabilitate. Puzzle-ul ne învață cum să ignorăm impresiile unor întâmplări aparent aleatorii și să ne concentrăm în schimb pe raționament și fapte.

Modulele Random și Tkinter

Pentru a construi o simulare Monty Hall în Python, începeți cu modulele Random și Tkinter.

Există mai multe funcții pentru producerea numerelor aleatoare în modulul Aleatoriu. Puteți folosi acești algoritmi pentru a genera secvențe amestecate, mișcări de joc și numere întregi pseudoaleatoare. Este folosit frecvent în jocuri precum cricketul de mână, sau un simplu test de tastare, precum și pentru a simula aruncarea de zaruri și pentru a amesteca liste.

Tkinter este biblioteca GUI implicită pentru Python. Folosind-o, puteți construi aplicații GUI fantastice. Puteți crea o aplicație pentru liste de activități, un editor de text sau un calculator simplu. Vă puteți pune cunoștințele în practică și vă puteți perfecționa abilitățile de programare folosind Python și Tkinter pentru a construi aplicații desktop de bază.

Deschideți un terminal și rulați următoarea comandă pentru a adăuga Tkinter la sistemul dvs.:

pip install tkinter

Cum să construiți un simulator Monty Hall folosind Python

Puteți găsi codul sursă al Simulatorului Monty Hall în aceasta Depozitul GitHub.

Importați modulele aleatoare și Tkinter. Funcția StringVar facilitează controlul valorii unui widget, cum ar fi o etichetă sau o intrare. Puteți folosi o Etichetă pentru a afișa un text pe ecran și o Intrare pentru a prelua intrarea utilizatorului.

Inițializați instanța Tkinter și afișați fereastra rădăcină. Setați dimensiunile ferestrei la 600 de pixeli lățime și 200 de pixeli înălțime folosind geometrie() metodă. Setați un titlu de fereastră adecvat și interziceți redimensionarea acesteia.

import Aleatoriu
din tkinter import StringVar, Label, Tk, Entry

fereastra = Tk()
window.geometry(„600x200”)
window.title(„Simularea Monty Hall”)
window.resizable(0, 0)

Apoi, configurați două perechi de widget-uri și variabile pentru a stoca rezultatele simulării. Aplicația dvs. va solicita finalizarea unui număr de rulări. În timpul fiecărei curse, acesta va simula jocul și va înregistra rezultatul în fiecare caz: dacă jucătorul decide să schimbe sau să păstreze aceeași alegere.

Folosind StringVar(), setați valorile inițiale ale aceleiași alegeri și comutați alegerea la 0. Definiți un widget Entry și setați dimensiunea fontului la 5. Declarați două etichete pentru a afișa aceeași alegere și alegerea comutată și poziționați-o. Declarați încă două etichete care vor afișa valoarea variabilelor pe care le-ați definit mai devreme. În cele din urmă, poziționați widgetul Intrare sub aceste patru etichete.

same_choice = StringVar()
switched_choice = StringVar()
same_choice.set(0)
switched_choice.set(0)
no_sample = Intrare (font=5)

Etichetă (text=„Aceeași alegere”).locul (x=230, y=58)
Etichetă (text=„Alegere comutată”).locul (x=230, y=90)
Etichetă (textvariable=same_choice, font=(50)).locul (x=350, y=58)
Etichetă (textvariable=switched_choice, font=(50)).locul (x=350, y=90)
fără_probă.loc (x=200, y=120)

Definiți o funcție, simula. Inițializați variabilele rezultat și obțineți valoarea eșantionului introdusă de utilizator. Declarați o listă care conține elementele pe care ușile le vor dezvălui.

În fiecare cursă, faceți o listă duplicată a ușilor originale și amestecați-o într-o ordine aleatorie. Alegeți o ușă aleatorie și îndepărtați-o - aceasta simulează alegerea jucătorului. Apoi simulați dezvăluirea lui Monty: dacă prima ușă nu conține premiul, deschideți-o, altfel deschideți a doua ușă. Eliminați acea alegere și lăsați ușa rămasă ca opțiune la care să comutați.

defsimula(eveniment):
same_choice_result = 0
switched_choice_result = 0
mostre = int (no_sample.get())
uși = ["aur", "capră", "capră"]

pentru _ în interval (eșantioane):
uși_simulate = uși.copy()
random.shuffle (uși_simulate)
first_choice = random.choice (uși_simulate)
simulated_doors.remove (prima_alegere)
opened_door = uși_simulate[0] dacă uși_simulate[0] != "aur"altfel uși_simulate[1]
simulated_doors.remove (opened_door)
switched_second_choice = uși_simulate[0]

Dacă prima alegere conține premiul dorit, creșteți rezultatul aceleiași alegeri cu unul și reflectați-l pe ecran. În caz contrar, efectuați aceeași operațiune pentru alegerea comutată.

dacă prima_alegere == "aur":
same_choice_result += 1
same_choice.set (same_choice_result)
elif switched_second_choice == "aur":
rezultatul_alegerea_commutată += 1
switched_choice.set (switched_choice_result)

Un pas important este să legați tasta Enter cu un eveniment din fereastra Tkinter. Acest lucru asigură că atunci când jucătorul apasă introduce, va rula o anumită funcție. Pentru a realiza acest lucru, treceți șir și funcția de simulare ca parametri ai lega() funcţie.

The mainloop() funcția îi spune lui Python să ruleze bucla de evenimente Tkinter și să asculte evenimente (cum ar fi apăsările de butoane) până când închideți fereastra.

no_sample.bind("", simula)
window.mainloop()

Pune totul împreună și rulează-ți programul pentru a simula puzzle-ul în acțiune.

Ieșirea Monty Hall Simulator folosind Python

La rularea programului, veți vedea o fereastră simplă cu etichetele Același și comutat. Introduceți un număr de eșantion în câmpul din partea de jos pentru a vizualiza rezultatele simulate. În acest eșantion de 3 rulări, programul arată că câștigă o dată cu aceeași alegere și de două ori cu un comutator.

Aceste rezultate sunt aleatorii, dar puteți rula simularea cu o dimensiune mai mare a eșantionului pentru mai multă acuratețe. În următoarea dimensiune a eșantionului de 100, alegerea schimbată câștigă de 65 de ori.

Rezolvarea problemelor folosind programare

Simulatorul Monty Hall este o demonstrație excelentă a modului în care puteți utiliza programarea pentru a rezolva problemele din viața reală. Puteți dezvolta diverși algoritmi și antrena modele pentru a îndeplini anumite sarcini, cum ar fi sortarea unei matrice sau îmbunătățirea eficienței unui sistem pentru o producție optimă.

Diferite limbaje de programare oferă capacități și funcții diferite pentru a ușura programarea. Folosind Python, puteți crea modele care pot prezice valorile viitoare ale unui set de date cu o precizie mai mare. În plus, puteți automatiza operațiunile repetitive, puteți reduce munca plictisitoare și puteți îmbunătăți viteza și precizia.