Če ste otrok v 70-ih letih, ste morda odrasli ob gledanju priljubljene igralne oddaje Sklenimo dogovor. Od takrat ljudje živahno razpravljajo o uganki Monty Hall in se zabavajo, ko jo posnemajo. Osupljivo napetost in dramo, ki nastaneta, ko tekmovalec izbere ena od treh vrat, je vsakič zabavno gledati.
Z uporabo matematike in malo programiranja boste zgradili Monty Hall Simulator z uporabo Pythona. S tem se boste lahko enkrat za vselej odločili, da zamenjava vrat poveča vaše možnosti za zmago.
Kaj je problem Monty Halla?
Problem Montyja Halla je možganska zbadljivka, poimenovana po voditelju igre, Montyju Hallu. Na voljo so tri vrata, od katerih je le v enih želena nagrada. Ko izberete vrata, Monty - kdo ve, kaj je za njimi - odpre druga vrata in razkrije kozo. Zdaj imate možnost, da vztrajate pri prvotni odločitvi ali preklopite na druga vrata.
Zaradi svoje presenetljive in nepredvidljive narave je uganka Monty Hall zelo priljubljena. Čeprav se ukvarja z verjetnostmi, rešitev kljubuje intuiciji. Služi kot odličen prikaz tega, kako zmedeni so lahko izračuni verjetnosti. Uganka nas uči, kako ignorirati vtise na videz naključnih dogodkov in se namesto tega osredotočiti na sklepanje in dejstva.
Modula Random in Tkinter
Če želite zgraditi simulacijo Monty Hall v Pythonu, začnite z moduloma Random in Tkinter.
V modulu Random obstaja več funkcij za ustvarjanje naključnih števil. S temi algoritmi lahko ustvarite premešana zaporedja, gibe igre in psevdonaključna cela števila. Pogosto se uporablja v igre, kot je ročni kriket, oz preprost test tipkanja, pa tudi za simulacijo metov kock in mešanje seznamov.
Tkinter je privzeta knjižnica GUI za Python. Z njegovo uporabo lahko ustvarite fantastične GUI aplikacije. Ustvarite lahko aplikacijo za seznam opravil, urejevalnik besedil ali preprost kalkulator. Svoje znanje lahko uporabite v praksi in izpopolnite svoje veščine programiranja z uporabo Pythona in Tkinterja za izdelavo osnovnih namiznih aplikacij.
Odprite terminal in zaženite naslednji ukaz, da dodate Tkinter v svoj sistem:
pip namestite tkinter
Kako zgraditi simulator Monty Halla z uporabo Pythona
Tu lahko najdete izvorno kodo simulatorja Monty Hall Repozitorij GitHub.
Uvozite module random in Tkinter. Funkcija StringVar olajša nadzor nad vrednostjo gradnika, kot sta oznaka ali vnos. Uporabite lahko oznako za prikaz besedila na zaslonu in vnos za pridobivanje uporabniškega vnosa.
Inicializirajte primerek Tkinter in prikažite korensko okno. Nastavite dimenzije okna na 600 slikovnih pik v širino in 200 slikovnih pik v višino z uporabo geometrija() metoda. Nastavite ustrezen naslov okna in prepovejte njegovo spreminjanje velikosti.
uvoz naključen
od tkinter uvoz StringVar, Label, Tk, Entry
okno = Tk()
window.geometry("600x200")
window.title("Simulacija Monty Hall")
window.resizable(0, 0)
Nato nastavite dva para pripomočkov in spremenljivk za shranjevanje rezultatov simulacije. Vaša aplikacija bo zahtevala določeno število zagonov. Med vsakim tekom bo simuliral igro in zabeležil rezultat v vsakem primeru: ali se igralec odloči zamenjati ali obdržati isto izbiro.
Z uporabo StringVar() nastavite začetne vrednosti iste izbire in preklopite izbiro na 0. Določite pripomoček Entry in mu nastavite velikost pisave na 5. Navedite dve oznaki za prikaz iste in zamenjane izbire ter jo postavite. Navedite še dve oznaki, ki bosta prikazali vrednost spremenljivk, ki ste jih definirali prej. Končno postavite gradnik Entry pod te štiri oznake.
enaka_izbira = StringVar()
preklopna_izbira = StringVar()
ista_izbira.set(0)
switched_choice.set(0)
no_sample = Vnos (font=5)
Oznaka (besedilo="Ista izbira").mesto (x=230, y=58)
Oznaka (besedilo="Spremenjena izbira").mesto (x=230, y=90)
Oznaka (textvariable=same_choice, font=(50)).mesto (x=350, y=58)
Oznaka (textvariable=switched_choice, font=(50)).mesto (x=350, y=90)
no_sample.place (x=200, y=120)
Definirajte funkcijo, simulirati. Inicializirajte spremenljivke rezultata in pridobite vzorčno vrednost, ki jo vnese uporabnik. Navedite seznam, ki vsebuje predmete, ki jih bodo vrata razkrila.
Znotraj vsakega zagona naredite dvojnik seznama originalnih vrat in ga premešajte v naključnem vrstnem redu. Izberite naključna vrata in jih odstranite - to simulira igralčevo izbiro. Nato simulirajte Montyjevo razkritje: če prva vrata ne vsebujejo nagrade, jih odprite, sicer odprite druga vrata. Odstranite to izbiro in pustite preostala vrata kot možnost za preklop.
defsimulirati(dogodek):
ista_izbira_rezultat = 0
switched_choice_result = 0
vzorci = int (no_sample.get())
vrata = ["zlato", "koza", "koza"]
za _ v obseg (vzorci):
simulirana_vrata = doors.copy()
random.shuffle (simulirana_vrata)
first_choice = random.choice (simulirana_vrata)
simulirana_vrata.odstrani (prva_izbira)
odprta_vrata = simulirana_vrata[0] če simulirana_vrata[0] != "zlato"drugače simulirana_vrata[1]
simulirana_vrata.odstrani (odprta_vrata)
switched_second_choice = simulirana_vrata[0]
Če prva izbira vsebuje želeno nagrado, povečajte rezultat iste izbire za eno in ga odražajte na zaslonu. V nasprotnem primeru izvedite isto operacijo za preklopljeno izbiro.
če prva_izbira == "zlato":
ista_izbira_rezultat += 1
same_choice.set (same_choice_result)
elif zamenjana_druga_izbira == "zlato":
preklopna_izbira_rezultat += 1
switched_choice.set (switched_choice_result)
Pomemben korak je povezovanje tipke Enter z dogodkom v oknu Tkinter. S tem zagotovite, da ko igralec pritisne Vnesite, se bo izvajala določena funkcija. Če želite to doseči, prenesite
The glavna zanka() funkcija pove Pythonu, naj zažene zanko dogodkov Tkinter in posluša dogodke (kot so pritiski gumbov), dokler ne zaprete okna.
no_sample.bind("" , simulirati)
window.mainloop()
Sestavite vse skupaj in zaženite program za simulacijo sestavljanke v akciji.
Izhod simulatorja Monty Hall z uporabo Pythona
Ko zaženete program, boste videli preprosto okno z oznakama Same in Switched choice. Vnesite številko vzorca v polje na dnu, da si ogledate simulirane rezultate. V tem vzorcu treh potekov program pokaže, da zmaga enkrat z isto izbiro in dvakrat s preklopom.
Ti rezultati so naključni, vendar lahko za večjo natančnost izvedete simulacijo z večjo velikostjo vzorca. V naslednji velikosti vzorca 100 zamenjana izbira zmaga 65-krat.
Reševanje težav s programiranjem
Simulator Monty Hall je odličen prikaz, kako lahko s programiranjem rešite probleme v resničnem življenju. Razvijete lahko različne algoritme in usposobite modele za izvajanje določenih nalog, kot je razvrščanje niza ali izboljšanje učinkovitosti sistema za optimalno proizvodnjo.
Različni programski jeziki ponujajo različne zmožnosti in funkcije za lažje programiranje. Z uporabo Pythona lahko ustvarite modele, ki lahko z večjo natančnostjo napovejo prihodnje vrednosti nabora podatkov. Poleg tega lahko avtomatizirate ponavljajoče se operacije, zmanjšate dolgočasno delo ter izboljšate hitrost in natančnost.