Kaltaisesi lukijat auttavat tukemaan MUO: ta. Kun teet ostoksen käyttämällä sivustollamme olevia linkkejä, voimme ansaita kumppanipalkkion. Lue lisää.

Jos olet 70-vuotias lapsi, olet saattanut kasvaa katsomassa suosittua Let's Make a Deal -peliohjelmaa. Siitä lähtien ihmiset ovat keskustelleet elävästi Monty Hall -pulmista ja pitäneet hauskaa sen jäljittelemisessä. Hämmentävää jännitystä ja draamaa, joka syntyy, kun kilpailija valitsee yhden kolmesta ovesta, on hauska seurata joka kerta.

Käyttämällä matematiikkaa ja hieman ohjelmointia aiot rakentaa Monty Hall -simulaattorin Pythonilla. Tämän avulla voit lopullisesti päättää, että ovien vaihtaminen lisää voittomahdollisuuksiasi.

Mikä on Monty Hall -ongelma?

Monty Hall -ongelma on aivojumppa, joka on nimetty pelishow-juontaja Monty Hallin mukaan. Ovia on kolme, joista vain yhdessä on haluttu palkinto. Kun olet valinnut oven, Monty – kuka tietää, mitä niiden takana on – avaa toisen oven ja paljastaa vuohen. Sinulla on nyt mahdollisuus pysyä alkuperäisessä päätöksessäsi tai vaihtaa toiseen oveen.

instagram viewer

Yllättävän ja arvaamattoman luonteensa vuoksi Monty Hall -palapeli on erittäin suosittu. Vaikka se käsittelee todennäköisyyksiä, ratkaisu uhmaa intuitiota. Se toimii erinomaisena osoituksena siitä, kuinka hämmentäviä todennäköisyyslaskelmat voivat olla. Palapeli opettaa meitä jättämään huomiotta vaikutelmat näennäisesti satunnaisista tapahtumista ja keskittymään sen sijaan päättelyyn ja tosiasioihin.

Satunnais- ja Tkinter-moduulit

Jos haluat rakentaa Monty Hall -simuloinnin Pythonissa, aloita Random- ja Tkinter-moduuleilla.

Random-moduulissa on useita toimintoja satunnaislukujen tuottamiseksi. Voit käyttää näitä algoritmeja luomaan sekoitettuja sekvenssejä, peliliikkeitä ja näennäissatunnaisia ​​kokonaislukuja. Sitä käytetään usein mm pelejä, kuten käsikriketti, tai yksinkertainen kirjoitustesti, sekä simuloida nopanheittoja ja sekoittaa listoja.

Tkinter on Pythonin oletuskäyttöliittymäkirjasto. Sen avulla voit rakentaa upeita GUI-sovelluksia. Voit luoda tehtävälistasovelluksen, tekstieditorin tai yksinkertaisen laskimen. Pythonin ja Tkinterin avulla voit soveltaa tietosi käytäntöön ja hioa ohjelmointitaitojasi perustyöpöytäsovellusten rakentamiseen.

Avaa pääte ja suorita seuraava komento lisätäksesi Tkinterin järjestelmääsi:

pip asennus tkinter

Monty Hall -simulaattorin rakentaminen Pythonilla

Löydät Monty Hall Simulatorin lähdekoodin tästä GitHub-arkisto.

Tuo satunnaiset ja Tkinter-moduulit. StringVar-funktio helpottaa widgetin, kuten tarran tai merkinnän, arvon hallintaa. Voit käyttää tarraa tekstin näyttämiseen näytöllä ja merkintää käyttäjän syötteiden hakemiseen.

Alusta Tkinter-instanssi ja näytä juuriikkuna. Aseta ikkunan mitat 600 pikseliä leveäksi ja 200 pikseliä korkeaksi käyttämällä geometria() menetelmä. Aseta sopiva ikkunan otsikko ja estä sen koon muuttaminen.

tuonti satunnainen
alkaen tkinter tuonti StringVar, Label, Tk, Entry

ikkuna = Tk()
window.geometry("600x200")
window.title("Monty Hall -simulaatio")
window.resizable(0, 0)

Aseta seuraavaksi kaksi paria widgetejä ja muuttujia simulaation tulosten tallentamiseksi. Sovelluksesi pyytää suorittamaan useita suorituksia. Jokaisen ajon aikana se simuloi peliä ja tallentaa tuloksen kussakin tapauksessa: päättääkö pelaaja vaihtaa vai säilyttää saman valinnan.

Aseta StringVar(:lla) saman valinnan ja vaihdetun valinnan alkuarvot 0:ksi. Määritä Entry-widget ja aseta sen fonttikooksi 5. Ilmoita kaksi tarraa näyttämään sama ja vaihdettu valinta ja aseta se. Ilmoita kaksi muuta tunnistetta, jotka näyttävät aiemmin määrittämiesi muuttujien arvon. Sijoita lopuksi Entry-widget näiden neljän tunnisteen alle.

sama_valinta = StringVar()
switched_choice = StringVar()
same_choice.set(0)
switched_choice.set(0)
no_sample = Merkintä (font=5)

Etiketti (teksti="Sama valinta").paikka (x=230, y=58)
Etiketti (teksti="Vaihtunut valinta").paikka (x=230, y=90)
Tunniste (tekstimuuttuja=same_choice, font=(50)).paikka (x=350, y=58)
Tunniste (tekstimuuttuja=switched_choice, font=(50)).paikka (x=350, y=90)
no_sample.place (x=200, y=120)

Määritä funktio, simuloida. Alusta tulosmuuttujat ja hanki käyttäjän syöttämä näytearvo. Ilmoita luettelo, joka sisältää kohteet, jotka ovet paljastavat.

Tee jokaisen ajon aikana kaksoisluettelo alkuperäisistä ovista ja sekoita se satunnaisessa järjestyksessä. Valitse satunnainen ovi ja poista se – tämä simuloi pelaajan valintaa. Simuloi sitten Montyn paljastamista: jos ensimmäinen ovi ei sisällä palkintoa, avaa se, muuten avaa toinen ovi. Poista tämä valinta ja jätä jäljellä oleva ovi vaihtoehdoksi, johon voit vaihtaa.

defsimuloida(tapahtuma):
sama_valintatulos = 0
switched_choice_result = 0
samples = int (no_sample.get())
ovet = ["kulta", "vuohi", "vuohi"]

varten _ sisään alue (näytteet):
simulated_doors = ovet.copy()
random.shuffle (simuloidut_ovet)
ensimmäinen_valinta = satunnainen.valinta (simuloidut_ovet)
simulated_doors.remove (first_choice)
avattu_ovi = simuloidut_ovet[0] jos simuloidut_ovet[0] != "kulta"muu simuloidut_ovet[1]
simulated_doors.remove (avattu_ovi)
switched_second_choice = simuloidut_ovet[0]

Jos ensimmäinen vaihtoehto sisältää halutun palkinnon, suurenna samaa valintatulosta yhdellä ja näytä se näytöllä. Muussa tapauksessa suorita sama toimenpide kytketylle valinnalle.

jos ensimmäinen_valinta == "kulta":
sama_valintatulos += 1
same_choice.set (sama_choice_result)
elif switched_second_choice == "kulta":
vaihdettu_valintatulos += 1
switched_choice.set (switched_choice_result)

Tärkeä vaihe on sitoa Enter-näppäin tapahtumaan Tkinter-ikkunassa. Näin varmistetaan, että kun pelaaja painaa Tulla sisään, tietty toiminto suoritetaan. Tämän saavuttamiseksi ohita merkkijono ja simulointitoiminto parametreina sitoa() toiminto.

The mainloop() toiminto käskee Pythonia suorittamaan Tkinterin tapahtumasilmukan ja kuuntelemaan tapahtumia (kuten painikkeen painalluksia), kunnes suljet ikkunan.

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

Yhdistä kaikki ja suorita ohjelma simuloidaksesi palapelin toiminnassa.

Monty Hall -simulaattorin tulos Pythonilla

Ohjelmaa suoritettaessa näet yksinkertaisen ikkunan, jossa on Same- ja Switched choice -tarrat. Näet simuloidut tulokset kirjoittamalla näytenumeron alareunassa olevaan kenttään. Tässä 3 ajon näytteessä ohjelma näyttää voittavansa kerran samalla valinnalla ja kahdesti kytkimellä.

Nämä tulokset ovat satunnaisia, mutta voit suorittaa simulaation suuremmalla otoskoolla tarkkuuden lisäämiseksi. Seuraavassa 100 otoskoossa vaihdettu valinta voittaa 65 kertaa.

Ongelmien ratkaiseminen ohjelmoinnin avulla

Monty Hall Simulator on erinomainen osoitus siitä, kuinka voit käyttää ohjelmointia ratkaisemaan tosielämän ongelmia. Voit kehittää erilaisia ​​algoritmeja ja kouluttaa malleja tiettyjen tehtävien suorittamiseen, kuten taulukon lajitteluun tai järjestelmän tehokkuuden parantamiseen optimaalista tuotantoa varten.

Eri ohjelmointikielet tarjoavat erilaisia ​​ominaisuuksia ja toimintoja ohjelmoinnin helpottamiseksi. Pythonin avulla voit luoda malleja, jotka voivat ennustaa tietojoukon tulevat arvot suuremmalla tarkkuudella. Lisäksi voit automatisoida toistuvia toimintoja, vähentää tylsää työtä ja parantaa nopeutta ja tarkkuutta.