Teiesugused lugejad aitavad MUO-d toetada. Kui teete ostu meie saidil olevate linkide abil, võime teenida sidusettevõtte komisjonitasu. Loe rohkem.

Kui olete 70ndate laps, olete võib-olla üles kasvanud populaarset mängusaadet Let's Make a Deal vaadates. Sellest ajast peale on inimesed Monty Halli mõistatust elavalt arutanud ja naudivad seda paljundades. Hämmastav põnevus ja draama, mis tekib, kui võistleja valib ühe kolmest uksest, on iga kord lõbus jälgida.

Kasutades matemaatikat ja veidi programmeerimist, kavatsete Pythoni abil ehitada Monty Halli simulaatori. Seda kasutades saate lõplikult otsustada, et uste vahetamine suurendab teie võiduvõimalusi.

Mis on Monty Halli probleem?

Monty Halli probleem on ajurünnak, mis on saanud nime gameshow juhi Monty Halli järgi. Seal on kolm ust, millest ainult üks sisaldab soovitud auhinda. Kui olete ukse valinud, avab Monty – kes teab, mis nende taga on – teise ukse, paljastades kitse. Nüüd on teil võimalus jääda oma esialgse otsuse juurde või minna teisele uksele.

instagram viewer

Oma üllatava ja ettearvamatu olemuse tõttu on Monty Halli pusle väga populaarne. Kuigi see käsitleb tõenäosusi, trotsib lahendus intuitsiooni. See on suurepärane näide sellest, kui segadusttekitavad võivad tõenäosusarvutused olla. Pusle õpetab meid ignoreerima muljeid pealtnäha juhuslikest sündmustest ning keskenduma selle asemel arutluskäikudele ja faktidele.

Juhuslikud ja Tkinteri moodulid

Monty Halli simulatsiooni loomiseks Pythonis alustage moodulitest Random ja Tkinter.

Juhuslike arvude loomiseks on juhuslike arvude loomiseks mitu funktsiooni. Neid algoritme saate kasutada segatud jadade, mänguliigutuste ja pseudojuhuslike täisarvude genereerimiseks. Seda kasutatakse sageli mängud nagu käsikriket, või lihtne tippimiskatse, samuti täringuviske simuleerimiseks ja loendite segamiseks.

Tkinter on Pythoni GUI vaiketeek. Seda kasutades saate luua fantastilisi GUI-rakendusi. Võite luua ülesannete loendi rakenduse, tekstiredaktori või lihtsa kalkulaatori. Pythoni ja Tkinteri abil saate oma teadmisi praktikas rakendada ja programmeerimisoskusi lihvida, et luua põhilisi töölauarakendusi.

Tkinteri lisamiseks oma süsteemi avage terminal ja käivitage järgmine käsk:

pip install tkinter

Kuidas Pythoni abil Monty Halli simulaatorit ehitada

Monty Halli simulaatori lähtekoodi leiate siit GitHubi hoidla.

Importige juhuslikud ja Tkinteri moodulid. Funktsioon StringVar muudab vidina (nt sildi või kirje) väärtuse juhtimise lihtsamaks. Ekraanil teksti kuvamiseks saate kasutada silti ja kasutaja sisendi toomiseks kirjet.

Initsialiseerige Tkinteri eksemplar ja kuvage juuraken. Seadke akna mõõtmeteks 600 pikslit lai ja 200 pikslit kõrge, kasutades geomeetria () meetod. Määrake sobiv akna pealkiri ja keelake selle suuruse muutmine.

importida juhuslik
alates tkinter importida StringVar, Label, Tk, Entry

aken = Tk()
window.geometry("600x200")
window.title("Monty Halli simulatsioon")
window.resizable(0, 0)

Järgmisena seadistage simulatsioonitulemuste salvestamiseks kaks paari vidinaid ja muutujaid. Teie rakendus küsib lõpuleviimiseks mitut käitamist. Iga jooksu ajal simuleerib see mängu ja salvestab igal juhul tulemuse: kas mängija otsustab vahetada või jätta sama valiku.

Määrake StringVar() abil sama valiku ja lülitatud valiku algväärtused 0-le. Määrake kirje vidin ja määrake selle fondi suuruseks 5. Deklareerige kaks silti, et kuvada sama ja vahetatud valik ning asetage see. Deklareerige veel kaks silti, mis kuvavad varem määratletud muutujate väärtused. Lõpuks asetage sisestusvidin nende nelja sildi alla.

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

Silt (tekst="Sama valik").koht (x=230, y=58)
Silt (tekst="Valikut vahetatud").koht (x=230, y=90)
Silt (tekstimuutuja=same_valik, font=(50)).koht (x=350, y=58)
Silt (tekstimuutuja=switched_choice, font=(50)).koht (x=350, y=90)
no_sample.place (x=200, y=120)

Määratlege funktsioon, simuleerida. Initsialiseerige tulemusmuutujad ja hankige kasutaja sisestatud näidisväärtus. Deklareerige nimekiri, mis sisaldab üksusi, mida uksed paljastavad.

Iga käigu jooksul tehke originaaluste loendi duplikaat ja segage see juhuslikus järjekorras. Valige juhuslik uks ja eemaldage see – see simuleerib mängija valikut. Seejärel simuleerige Monty paljastamist: kui esimene uks ei sisalda auhinda, avage see, vastasel juhul avage teine ​​uks. Eemaldage see valik ja jätke ülejäänud uks valikuks, millele lülituda.

defsimuleerida(sündmus):
sama_valik_tulemus = 0
switched_choice_result = 0
proovid = int (no_sample.get())
uksed = ["kuld", "kits", "kits"]

jaoks _ sisse vahemik (proovid):
simulated_doors = uksed.copy()
random.shuffle (simuleeritud_uksed)
esimene_valik = juhuslik.valik (simuleeritud_uksed)
simulated_doors.remove (esimene_valik)
avatud_uks = simuleeritud_uksed[0] kui simuleeritud_uksed[0] != "kuld"muidu simuleeritud_uksed[1]
simulated_doors.remove (avatud_uks)
switched_second_choice = simuleeritud_uksed[0]

Kui esimene valik sisaldab soovitud auhinda, suurendage sama valiku tulemust ühe võrra ja kajastage seda ekraanil. Vastasel juhul tehke sama toiming lülitatud valiku jaoks.

kui esimene_valik == "kuld":
sama_valik_tulemus += 1
same_choice.set (same_choice_result)
elif switched_second_choice == "kuld":
switched_choice_result += 1
switched_choice.set (switched_choice_result)

Oluline samm on sisestusklahvi sidumine sündmusega Tkinteri aknas. See tagab, et kui mängija vajutab Sisenema, käivitatakse konkreetne funktsioon. Selle saavutamiseks läbige string ja simulatsioonifunktsioon parameetritena bind() funktsiooni.

The mainloop() funktsioon käsib Pythonil käivitada Tkinteri sündmuste tsükli ja kuulata sündmusi (nt nupuvajutused), kuni akna sulgete.

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

Pange see kõik kokku ja käivitage programm, et simuleerida mõistatust tegevuses.

Monty Halli simulaatori väljund Pythoni abil

Programmi käivitamisel näete lihtsat akent, millel on sildid Sama ja Lülitatud valik. Simuleeritud tulemuste vaatamiseks sisestage allosas olevale väljale näidise number. Selles 3 käitamise näidises näitab programm, et võidab üks kord sama valikuga ja kaks korda lülitiga.

Need tulemused on juhuslikud, kuid täpsuse huvides saate simulatsiooni käivitada suurema valimiga. Järgmises valimi suuruses 100 võidab valitud valik 65 korda.

Probleemide lahendamine programmeerimise abil

Monty Halli simulaator on suurepärane näide sellest, kuidas saate programmeerimist kasutada reaalsete probleemide lahendamiseks. Saate töötada välja erinevaid algoritme ja koolitada mudeleid, et täita teatud ülesandeid, nagu massiivi sortimine või süsteemi tõhususe parandamine optimaalseks tootmiseks.

Erinevad programmeerimiskeeled pakuvad programmeerimise hõlbustamiseks erinevaid võimalusi ja funktsioone. Pythoni abil saate luua mudeleid, mis suudavad andmestiku tulevasi väärtusi suurema täpsusega ennustada. Lisaks saate automatiseerida korduvaid toiminguid, vähendada igavat tööd ning parandada kiirust ja täpsust.