Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju. Čitaj više.

Ako ste klinac iz 70-ih, možda ste odrasli gledajući popularnu seriju igrica, Hajde da se dogovorimo. Od tada ljudi živo raspravljaju o Monty Hall slagalici i zabavljaju se replicirajući je. Zapanjujuću napetost i dramu koja nastaje dok natjecatelj bira jedna od troja vrata zabavno je gledati svaki put.

Koristeći matematiku i malo programiranja, izgradit ćete Monty Hall Simulator koristeći Python. Koristeći ovo, moći ćete jednom zauvijek odlučiti da promjena vrata povećava vaše šanse za pobjedu.

Što je problem Monty Halla?

Problem Montyja Halla je mozgalica nazvana po voditelju Gameshowa, Montyju Hallu. Postoje troja vrata, od kojih samo jedna sadrži željenu nagradu. Nakon što odaberete vrata, Monty - tko zna što je iza njih - otvara druga vrata, otkrivajući kozu. Sada imate mogućnost ostati pri svojoj prvotnoj odluci ili prijeći na druga vrata.

Zbog svoje iznenađujuće i nepredvidive prirode, slagalica Monty Hall vrlo je popularna. Iako se bavi vjerojatnostima, rješenje prkosi intuiciji. Služi kao izvrsna demonstracija koliko izračuni vjerojatnosti mogu biti zbunjujući. Zagonetka nas uči kako zanemariti dojmove naizgled slučajnih događaja i umjesto toga se usredotočiti na razmišljanje i činjenice.

instagram viewer

Random i Tkinter moduli

Za izradu Monty Hall simulacije u Pythonu, počnite s modulima Random i Tkinter.

Postoji nekoliko funkcija za proizvodnju slučajnih brojeva u Random modulu. Ove algoritme možete koristiti za generiranje ispremiješanih nizova, pokreta u igri i pseudo-slučajnih cijelih brojeva. Često se koristi u igre poput ručnog kriketa, ili jednostavan test tipkanja, kao i za simulaciju bacanja kockica i miješanje popisa.

Tkinter je zadana GUI biblioteka za Python. Koristeći ga, možete izgraditi fantastične GUI aplikacije. Možete izraditi aplikaciju za popis obaveza, uređivač teksta ili jednostavan kalkulator. Svoje znanje možete primijeniti u praksi i usavršiti svoje vještine programiranja koristeći Python i Tkinter za izradu osnovnih aplikacija za stolna računala.

Otvorite terminal i pokrenite sljedeću naredbu da dodate Tkinter u svoj sustav:

pip instaliraj tkinter

Kako izgraditi Monty Hall simulator koristeći Python

Ovdje možete pronaći izvorni kod simulatora Monty Halla GitHub spremište.

Uvezite module random i Tkinter. Funkcija StringVar olakšava kontrolu vrijednosti widgeta kao što je Label ili Entry. Možete koristiti oznaku za prikaz teksta na ekranu i unos za dohvaćanje korisničkog unosa.

Inicijalizirajte Tkinter instancu i prikažite korijenski prozor. Postavite dimenzije prozora na 600 piksela širine i 200 piksela visine pomoću geometrija() metoda. Postavite odgovarajući naslov prozora i zabranite njegovu promjenu veličine.

uvoz slučajan
iz tkinter uvoz StringVar, Label, Tk, Entry

prozor = Tk()
window.geometry("600x200")
window.title("Monty Hall simulacija")
prozor.promjenjive veličine(0, 0)

Zatim postavite dva para widgeta i varijabli za pohranjivanje rezultata simulacije. Vaša će aplikacija tražiti određeni broj pokretanja za dovršetak. Tijekom svakog izvođenja, simulirati će igru ​​i zabilježiti rezultat u svakom slučaju: odluči li se igrač promijeniti ili zadržati isti izbor.

Koristeći StringVar(), postavite početne vrijednosti istog izbora i prebacite izbor na 0. Definirajte widget za unos i postavite mu veličinu fonta na 5. Deklarirajte dvije oznake za prikaz istog i promijenjenog izbora i postavite ga. Deklarirajte još dvije oznake koje će prikazati vrijednost varijabli koje ste ranije definirali. Na kraju postavite widget Entry ispod ove četiri oznake.

isti_izbor = StringVar()
promijenjeni_izbor = StringVar()
isti_izbor.set(0)
promijenjeni_izbor.set(0)
no_sample = Unos (font=5)

Oznaka (tekst="isti izbor").mjesto (x=230, y=58)
Oznaka (tekst="Promijenjeni izbor").mjesto (x=230, y=90)
Oznaka (textvariable=same_choice, font=(50)).mjesto (x=350, y=58)
Oznaka (textvariable=switched_choice, font=(50)).mjesto (x=350, y=90)
no_sample.place (x=200, y=120)

Definirajte funkciju, simulirati. Inicijalizirajte varijable rezultata i dohvatite vrijednost uzorka koju je unio korisnik. Objavite popis koji sadrži stavke koje će vrata otkriti.

Unutar svakog pokretanja napravite duplicirani popis originalnih vrata i pomiješajte ga nasumičnim redoslijedom. Odaberite slučajna vrata i uklonite ih—ovo simulira izbor igrača. Zatim simulirajte Montyjevo otkrivanje: ako prva vrata ne sadrže nagradu, otvorite ih, inače otvorite druga vrata. Uklonite taj izbor i ostavite preostala vrata kao opciju za prebacivanje.

defsimulirati(događaj):
isti_rezultat_izbora = 0
promijenjeni_rezultat_izbora = 0
uzorci = int (no_sample.get())
vrata = ["zlato", "Jarac", "Jarac"]

za _ u opseg (uzorci):
simulirana_vrata = vrata.copy()
random.shuffle (simulirana_vrata)
first_choice = random.choice (simulirana_vrata)
simulirana_vrata.ukloni (prvi_izbor)
otvorena_vrata = simulirana_vrata[0] ako simulirana_vrata[0] != "zlato"drugo simulirana_vrata[1]
simulirana_vrata.ukloni (otvorena_vrata)
promijenjen_drugi_izbor = simulirana_vrata[0]

Ako prvi izbor sadrži željenu nagradu, povećajte rezultat istog izbora za jedan i odrazite ga na zaslonu. Inače, izvršite istu operaciju za promijenjeni izbor.

ako prvi_izbor == "zlato":
isti_rezultat_izbora += 1
isti_izbor.set (isti_izbor_rezultat)
elif promijenjen_drugi_izbor == "zlato":
promijenjeni_rezultat_izbora += 1
switched_choice.set (switched_choice_result)

Važan korak je vezanje tipke Enter s događajem u Tkinter prozoru. Na taj način osiguravate da kada igrač pritisne Unesipokrenut će se određena funkcija. Da biste to postigli, prođite niz i funkcija simulacije kao parametri za vezati() funkcija.

The glavna petlja() funkcija govori Pythonu da pokrene Tkinter petlju događaja i osluškuje događaje (kao što su pritisci gumba) dok ne zatvorite prozor.

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

Sastavite sve zajedno i pokrenite svoj program za simulaciju slagalice u akciji.

Izlaz Monty Hall simulatora koji koristi Python

Prilikom pokretanja programa vidjet ćete jednostavan prozor s oznakama Isti i Promijenjeni izbor. Unesite broj uzorka u polje na dnu kako biste vidjeli simulirane rezultate. U ovom uzorku od 3 izvođenja, program pokazuje da je jednom pobijedio s istim izborom i dva puta s promjenom.

Ovi su rezultati nasumični, ali možete pokrenuti simulaciju s većom veličinom uzorka za veću točnost. U sljedećoj veličini uzorka od 100, promijenjeni izbor pobjeđuje 65 puta.

Rješavanje problema pomoću programiranja

Monty Hall Simulator izvrsna je demonstracija kako možete koristiti programiranje za rješavanje problema iz stvarnog života. Možete razviti različite algoritme i trenirati modele za obavljanje određenih zadataka poput sortiranja niza ili poboljšanja učinkovitosti sustava za optimalnu proizvodnju.

Različiti programski jezici nude različite mogućnosti i funkcije koje olakšavaju programiranje. Pomoću Pythona možete izraditi modele koji mogu predvidjeti buduće vrijednosti skupa podataka s većom točnošću. Nadalje, možete automatizirati operacije koje se ponavljaju, smanjiti dosadan rad i poboljšati brzinu i točnost.