Ja esat 70. gadu bērns, iespējams, esat uzaudzis, skatoties populāro spēļu šovu “Slēgsim darījumu”. Kopš tā laika cilvēki spilgti apspriež Monty Hall mīklu un izklaidējas to atkārtojot. Prātam neaptveramo spriedzi un drāmu, kas rodas, dalībniekam izvēloties vienu no trim durvīm, ir patīkami skatīties katru reizi.
Izmantojot matemātiku un nedaudz programmēšanas, jūs gatavojaties izveidot Monty Hall simulatoru, izmantojot Python. Izmantojot to, jūs varēsiet vienreiz un uz visiem laikiem izlemt, ka durvju pārslēgšana palielina jūsu izredzes laimēt.
Kas ir Monty Hall problēma?
Monty Hall problēma ir prāta spēle, kas nosaukta spēļu šova vadītāja Montija Hola vārdā. Ir trīs durvis, no kurām tikai vienā ir vēlamā balva. Kad esat izvēlējies durvis, Montijs — kas zina, kas ir aiz tām — atver citas durvis, atklājot kazu. Tagad jums ir iespēja palikt pie sava sākotnējā lēmuma vai pārslēgties uz citām durvīm.
Pārsteidzošā un neparedzamā rakstura dēļ Monty Hall puzle ir ļoti populāra. Lai gan tas attiecas uz varbūtībām, risinājums ir pretrunā intuīcijai. Tas kalpo kā lielisks pierādījums tam, cik mulsinoši var būt varbūtības aprēķini. Puzle māca mums, kā ignorēt iespaidus par šķietami nejaušiem notikumiem un tā vietā koncentrēties uz argumentāciju un faktiem.
Nejaušie un Tkintera moduļi
Lai izveidotu Monty Hall simulāciju Python, sāciet ar Random un Tkinter moduļiem.
Nejaušības modulī ir vairākas funkcijas nejaušu skaitļu iegūšanai. Varat izmantot šos algoritmus, lai ģenerētu jauktas secības, spēles kustības un pseidogadījuma veselus skaitļus. To bieži izmanto spēles, piemēram, roku krikets, vai vienkāršs mašīnrakstīšanas tests, kā arī lai simulētu kauliņu mešanu un jauktu sarakstus.
Tkinter ir Python noklusējuma GUI bibliotēka. Izmantojot to, jūs varat izveidot fantastiskas GUI lietojumprogrammas. Varat izveidot uzdevumu saraksta lietotni, teksta redaktoru vai vienkāršu kalkulatoru. Varat likt lietā savas zināšanas un uzlabot programmēšanas prasmes, izmantojot Python un Tkinter, lai izveidotu pamata darbvirsmas lietotnes.
Atveriet termināli un palaidiet šo komandu, lai sistēmai pievienotu Tkinter:
pip instalēt tkinter
Kā izveidot Monty Hall simulatoru, izmantojot Python
Šeit varat atrast Monty Hall Simulator pirmkodu GitHub repozitorijs.
Importējiet izlases un Tkinter moduļus. Funkcija StringVar ļauj vieglāk kontrolēt logrīka, piemēram, etiķetes vai ieraksta, vērtību. Varat izmantot etiķeti, lai ekrānā parādītu tekstu, un ierakstu, lai iegūtu lietotāja ievadi.
Inicializējiet Tkinter gadījumu un parādiet saknes logu. Iestatiet loga izmērus uz 600 pikseļu platumu un 200 pikseļu augstumu, izmantojot ģeometrija () metodi. Iestatiet atbilstošu loga nosaukumu un aizliedziet tā izmēru maiņu.
imports nejauši
no tkinter imports StringVar, Label, Tk, Entry
logs = Tk()
window.geometry("600x200")
window.title("Monty Hall simulācija")
window.resizable(0, 0)
Pēc tam iestatiet divus logrīku un mainīgo pārus, lai saglabātu simulācijas rezultātus. Jūsu lietotne prasīs vairākas darbības, lai pabeigtu. Katra skrējiena laikā tas simulēs spēli un katrā gadījumā ierakstīs rezultātu: vai spēlētājs nolemj pārslēgties vai paturēt to pašu izvēli.
Izmantojot StringVar (), iestatiet tās pašas izvēles un pārslēgtās izvēles sākotnējās vērtības uz 0. Definējiet ieraksta logrīku un iestatiet tā fonta lielumu uz 5. Deklarējiet divas etiķetes, lai parādītu vienu un to pašu un pārslēgto izvēli, un novietojiet to. Deklarējiet vēl divas etiķetes, kas parādīs iepriekš definēto mainīgo vērtību. Visbeidzot novietojiet ieraksta logrīku zem šīm četrām etiķetēm.
same_choice = StringVar()
switched_choice = StringVar()
same_choice.set(0)
switched_choice.set(0)
no_sample = Ieraksts (fonts=5)
Etiķete (teksts="Tā pati izvēle").vieta (x=230, y=58)
Etiķete (teksts="Mainītā izvēle").vieta (x=230, y=90)
Etiķete (textvariable=same_choice, font=(50)).vieta (x=350, y=58)
Etiķete (textvariable=switched_choice, font=(50)).vieta (x=350, y=90)
no_sample.place (x=200, y=120)
Definējiet funkciju, simulēt. Inicializējiet rezultātu mainīgos un iegūstiet lietotāja ievadīto parauga vērtību. Izveidojiet sarakstu, kurā ir preces, kuras durvis atklās.
Katras darbības laikā izveidojiet oriģinālo durvju sarakstu dublikātus un sajauciet to nejaušā secībā. Izvēlieties nejaušas durvis un noņemiet tās — tas simulē spēlētāja izvēli. Pēc tam simulējiet Montija atklāšanu: ja pirmajās durvīs nav balvas, atveriet tās, pretējā gadījumā atveriet otrās durvis. Noņemiet šo izvēli un atstājiet pārējās durvis kā iespēju pārslēgties.
defsimulēt(pasākums):
pats_izvēles_rezultāts = 0
switched_choice_result = 0
paraugi = int (no_sample.get())
durvis = ["zelts", "kaza", "kaza"]
priekš _ iekšā diapazons (paraugi):
simulated_doors = durvis.copy()
random.shuffle (simulētas_durvis)
pirmā_izvēle = nejauša.izvēle (imitētas_durvis)
simulated_doors.remove (first_choice)
open_door = simulētas_durvis[0] ja simulētas_durvis[0] != "zelts"cits simulētas_durvis[1]
simulated_doors.remove (atvērtas_durvis)
switched_second_choice = simulētas_durvis[0]
Ja pirmā izvēle satur vēlamo balvu, palieliniet to pašu izvēles rezultātu par vienu un atspoguļojiet to ekrānā. Pretējā gadījumā veiciet to pašu darbību ar pārslēgto izvēli.
ja pirmā_izvēle == "zelts":
pats_izvēles_rezultāts += 1
same_choice.set (same_choice_result)
elifs switched_second_choice == "zelts":
switched_choice_result += 1
switched_choice.set (switched_choice_result)
Svarīgs solis ir saistīt taustiņu Enter ar notikumu Tkinter logā. To darot, tiek nodrošināts, ka tad, kad spēlētājs nospiež Ievadiet, darbosies noteikta funkcija. Lai to panāktu, nokārtojiet
The mainloop() funkcija liek Python palaist Tkinter notikumu cilpu un klausīties notikumus (piemēram, pogas nospiešanu), līdz aizverat logu.
no_sample.bind("" , simulēt)
window.mainloop()
Salieciet to visu kopā un palaidiet programmu, lai simulētu mīklu darbībā.
Monty Hall simulatora izvade, izmantojot Python
Palaižot programmu, jūs redzēsit vienkāršu logu ar etiķetēm Tas pats un Pārslēgts. Ievadiet parauga numuru laukā apakšā, lai skatītu simulētos rezultātus. Šajā 3 palaišanas paraugā programma parāda, ka tā uzvar vienu reizi ar tādu pašu izvēli un divreiz ar slēdzi.
Šie rezultāti ir nejauši, taču, lai iegūtu lielāku precizitāti, varat palaist simulāciju ar lielāku izlases lielumu. Nākamajā izlasē — 100 pārslēgtā izvēle uzvar 65 reizes.
Problēmu risināšana, izmantojot programmēšanu
Monty Hall Simulator ir lielisks demonstrējums tam, kā jūs varat izmantot programmēšanu, lai atrisinātu reālas dzīves problēmas. Varat izstrādāt dažādus algoritmus un apmācīt modeļus, lai veiktu konkrētus uzdevumus, piemēram, kārtotu masīvu vai uzlabotu sistēmas efektivitāti optimālai ražošanai.
Dažādas programmēšanas valodas piedāvā dažādas iespējas un funkcijas, lai atvieglotu programmēšanu. Izmantojot Python, varat izveidot modeļus, kas var paredzēt datu kopas nākotnes vērtības ar lielāku precizitāti. Turklāt jūs varat automatizēt atkārtotas darbības, samazināt garlaicīgu darbu un uzlabot ātrumu un precizitāti.