Jei esate aštuntojo dešimtmečio vaikas, galbūt užaugote žiūrėdami populiarų žaidimų laidą „Sudaryk sandorį“. Nuo tada žmonės gyvai diskutuoja apie „Monty Hall“ galvosūkį ir smagiai jį atkartoja. Protu nesuvokiama įtampa ir drama, kuri atsiranda dalyviui pasirenkant vieną iš trijų durų, yra smagu stebėti kiekvieną kartą.
Naudodamiesi matematika ir šiek tiek programavimo, jūs ketinate sukurti Monty Hall simuliatorių naudodami Python. Naudodami tai galėsite kartą ir visiems laikams nuspręsti, kad pakeitę duris padidinsite tikimybę laimėti.
Kas yra „Monty Hall“ problema?
Monty Hall problema yra galvosūkis, pavadintas žaidimų laidos vedėjos Monty Hall vardu. Yra trys durys, iš kurių tik vienoje yra norimas prizas. Kai pasirenkate duris, Monty, kas žino, kas yra už jų, atidaro kitas duris, atidengdamas ožką. Dabar turite galimybę laikytis savo pirminio sprendimo arba pereiti prie kitų durų.
Dėl savo stebinančio ir nenuspėjamo pobūdžio „Monty Hall“ galvosūkis yra labai populiarus. Nors jame kalbama apie tikimybes, sprendimas nepaiso intuicijos. Tai puikiai parodo, kokie painūs gali būti tikimybių skaičiavimai. Dėlionė mus moko, kaip ignoruoti iš pažiūros atsitiktinių įvykių įspūdžius, o sutelkti dėmesį į samprotavimus ir faktus.
Atsitiktiniai ir Tkinterio moduliai
Norėdami sukurti „Monty Hall“ modeliavimą „Python“, pradėkite nuo „Random“ ir „Tkinter“ modulių.
Atsitiktinių skaičių modulyje yra keletas funkcijų. Naudodami šiuos algoritmus galite generuoti sumaišytas sekas, žaidimo judesius ir pseudoatsitiktinius sveikuosius skaičius. Jis dažnai naudojamas žaidimai kaip rankinis kriketas, arba paprastas spausdinimo testas, taip pat imituoti kauliukų metimą ir maišyti sąrašus.
„Tkinter“ yra numatytoji „Python“ GUI biblioteka. Naudodamiesi juo galite kurti fantastiškas GUI programas. Galite sukurti užduočių sąrašo programą, teksto rengyklę arba paprastą skaičiuotuvą. Galite pritaikyti savo žinias praktikoje ir patobulinti savo programavimo įgūdžius naudodami Python ir Tkinter, kad sukurtumėte pagrindines darbalaukio programas.
Atidarykite terminalą ir paleiskite šią komandą, kad pridėtumėte Tkinter į savo sistemą:
pip įdiegti tkinter
Kaip sukurti Monty Hall simuliatorių naudojant Python
Čia galite rasti „Monty Hall Simulator“ šaltinio kodą GitHub saugykla.
Importuokite atsitiktinius ir Tkinter modulius. Funkcija StringVar leidžia lengviau valdyti valdiklio, pvz., etiketės ar įrašo, vertę. Galite naudoti etiketę, kad ekrane būtų rodomas tekstas, ir įrašą, kad gautumėte vartotojo įvestį.
Inicijuokite Tkinter egzempliorių ir parodykite šakninį langą. Nustatykite 600 pikselių pločio ir 200 pikselių aukščio lango matmenis naudodami geometrija () metodas. Nustatykite tinkamą lango pavadinimą ir uždrauskite keisti jo dydį.
importuoti atsitiktinis
iš tkinteris importuoti StringVar, etiketė, Tk, įrašas
langas = Tk()
window.geometry(„600 x 200“)
window.title(„Monty salės simuliacija“)
window.resizable(0, 0)
Tada nustatykite dvi poras valdiklių ir kintamųjų, kad išsaugotumėte modeliavimo rezultatus. Programa paprašys atlikti kelis paleidimus. Kiekvieno bėgimo metu jis imituos žaidimą ir kiekvienu atveju fiksuos rezultatą: ar žaidėjas nuspręs pakeisti, ar palikti tą patį pasirinkimą.
Naudodami StringVar(), nustatykite pradines to paties pasirinkimo ir perjungto pasirinkimo reikšmes į 0. Apibrėžkite įrašo valdiklį ir nustatykite jo šrifto dydį į 5. Paskelbkite dvi etiketes, kad būtų rodomas tas pats ir perjungtas pasirinkimas, ir nustatykite jį. Paskelbkite dar dvi etiketes, kuriose bus rodomos anksčiau apibrėžtų kintamųjų reikšmės. Galiausiai po šiomis keturiomis etiketėmis įdėkite valdiklį Įrašas.
tas pats_pasirinkimas = StringVar()
switched_choice = StringVar()
same_choice.set(0)
switched_choice.set(0)
no_sample = Įrašas (šriftas=5)
Etiketė (tekstas=„Tas pats pasirinkimas“).vieta (x=230, y=58)
Etiketė (tekstas=„Pakeistas pasirinkimas“).vieta (x=230, y=90)
Etiketė (textvariable=same_choice, font=(50)).vieta (x=350, y=58)
Etiketė (textvariable=switched_choice, font=(50)).vieta (x=350, y=90)
no_sample.place (x=200, y=120)
Apibrėžkite funkciją, imituoti. Inicijuokite rezultatų kintamuosius ir gaukite vartotojo įvestą imties reikšmę. Paskelbkite sąrašą, kuriame yra daiktai, kuriuos atskleis durys.
Kiekvieno važiavimo metu sukurkite pasikartojantį originalių durų sąrašą ir sumaišykite jį atsitiktine tvarka. Pasirinkite atsitiktines duris ir jas pašalinkite – tai imituoja žaidėjo pasirinkimą. Tada imituokite Monty's atskleidimą: jei pirmosiose duryse nėra prizo, atidarykite jas, kitaip atidarykite antrąsias duris. Pašalinkite šį pasirinkimą ir palikite likusias duris kaip galimybę perjungti.
defimituoti(įvykis):
tas pats_pasirinkimo_rezultatas = 0
switched_choice_result = 0
pavyzdžiai = int (no_sample.get())
durys = ["auksas", "ožka", "ožka"]
dėl _ in diapazonas (pavyzdžiai):
simulated_doors = durys.copy()
random.shuffle (imituoti_durys)
pirmasis_pasirinkimas = atsitiktinis.pasirinkimas (imituojamos_durys)
simulated_doors.remove (pirmasis_pasirinkimas)
open_door = imituojamos_duros[0] jeigu imituotos_duros[0] != "auksas"Kitas imituotos_duros[1]
simulated_doors.remove (atidarytos_duros)
switched_second_choice = imituojamos_duros[0]
Jei pirmame pasirinkime yra norimas prizas, padidinkite tą patį pasirinkimo rezultatą vienu ir atspindėkite jį ekrane. Kitu atveju atlikite tą pačią operaciją su perjungtu pasirinkimu.
jeigu pirmasis_pasirinkimas == "auksas":
tas pats_pasirinkimo_rezultatas += 1
tas pats_pasirinkimas.set (tas pats_pasirinkimo_rezultatas)
elifas switched_second_choice == "auksas":
switched_choice_result += 1
switched_choice.set (switched_choice_result)
Svarbus žingsnis yra susieti klavišą Enter su įvykiu Tkinter lange. Taip užtikrinama, kad kai žaidėjas paspaudžia Įeikite, veiks tam tikra funkcija. Norėdami tai pasiekti, pradėkite
The mainloop () funkcija liepia Python paleisti Tkinter įvykių kilpą ir klausytis įvykių (pvz., mygtukų paspaudimų), kol uždarysite langą.
no_sample.bind("" , imituoti)
window.mainloop()
Sudėkite viską ir paleiskite programą, kad imituotumėte galvosūkį.
Monty Hall simuliatoriaus išvestis naudojant Python
Vykdydami programą pamatysite paprastą langą su etiketėmis „Tas pats“ ir „Perjungtas pasirinkimas“. Apačioje esančiame laukelyje įveskite pavyzdžio numerį, kad peržiūrėtumėte imituotus rezultatus. Šiame 3 paleidimų pavyzdyje programa rodo, kad ji laimi vieną kartą su tuo pačiu pasirinkimu ir du kartus su jungikliu.
Šie rezultatai yra atsitiktiniai, tačiau galite paleisti modeliavimą naudodami didesnį imties dydį, kad būtų daugiau tikslumo. Esant tokiam 100 imties dydžiui, perjungtas pasirinkimas laimi 65 kartus.
Problemų sprendimas naudojant programavimą
„Monty Hall Simulator“ yra puikus pavyzdys, kaip galite naudoti programavimą sprendžiant realaus gyvenimo problemas. Galite kurti įvairius algoritmus ir mokyti modelius, kad atliktumėte tam tikras užduotis, pvz., rūšiuoti masyvą arba pagerinti sistemos efektyvumą siekiant optimalios gamybos.
Skirtingos programavimo kalbos siūlo skirtingas galimybes ir funkcijas, kad būtų lengviau programuoti. Naudodami Python galite kurti modelius, kurie gali tiksliau numatyti būsimas duomenų rinkinio reikšmes. Be to, galite automatizuoti pasikartojančias operacijas, sumažinti nuobodų darbą ir pagerinti greitį bei tikslumą.