Lesere som deg er med på å støtte MUO. Når du foretar et kjøp ved å bruke lenker på nettstedet vårt, kan vi tjene en tilknyttet provisjon. Les mer.

Hvis du er et 70-tallsbarn, har du kanskje vokst opp med å se det populære spillprogrammet Let's Make a Deal. Siden den gang diskuterer folk livlig Monty Hall-puslespillet og har det gøy å replikere det. Den ufattelige spenningen og dramaet som skapes når deltakeren velger en av de tre dørene, er morsomt å se hver gang.

Ved å bruke matematikk og litt programmering skal du bygge en Monty Hall Simulator ved hjelp av Python. Ved å bruke dette vil du en gang for alle kunne bestemme at det å bytte dør øker vinnersjansene dine.

Hva er Monty Hall-problemet?

Monty Hall-problemet er en hjernetrimmer oppkalt etter spillprogramverten Monty Hall. Det er tre dører, hvorav kun én inneholder en ønsket premie. Når du velger en dør, åpner Monty – hvem vet hva som er bak dem – en annen dør og avslører en geit. Du har nå muligheten til å holde fast ved den opprinnelige avgjørelsen eller bytte til den andre døren.

På grunn av sin overraskende og uforutsigbare natur, er Monty Hall-puslespillet veldig populært. Selv om den omhandler sannsynligheter, trosser løsningen intuisjonen. Det fungerer som en utmerket demonstrasjon av hvor forvirrende sannsynlighetsberegninger kan være. Puslespillet lærer oss hvordan vi kan ignorere inntrykk av tilsynelatende tilfeldige hendelser og i stedet fokusere på resonnement og fakta.

Random og Tkinter-modulene

For å bygge en Monty Hall-simulering i Python, start med Random- og Tkinter-modulene.

Det er flere funksjoner for å produsere tilfeldige tall i Tilfeldig-modulen. Du kan bruke disse algoritmene til å generere tilfeldige sekvenser, spillbevegelser og pseudo-tilfeldige heltall. Det brukes ofte i spill som håndcricket, eller en enkel skrivetest, samt å simulere terningkast og å blande lister.

Tkinter er standard GUI-bibliotek for Python. Ved å bruke den kan du bygge fantastiske GUI-applikasjoner. Du kan lage en oppgaveliste-app, et tekstredigeringsprogram eller en enkel kalkulator. Du kan bruke kunnskapen din i praksis og finpusse programmeringsferdighetene dine ved å bruke Python og Tkinter for å lage grunnleggende skrivebordsapper.

Åpne en terminal og kjør følgende kommando for å legge til Tkinter til systemet ditt:

pip installer tkinter

Hvordan bygge en Monty Hall-simulator ved hjelp av Python

Du kan finne kildekoden til Monty Hall Simulator i denne GitHub-depot.

Importer de tilfeldige og Tkinter-modulene. StringVar-funksjonen gjør det enklere å kontrollere verdien til en widget som en etikett eller oppføring. Du kan bruke en etikett for å vise litt tekst på skjermen og en oppføring for å hente brukerinndata.

Initialiser Tkinter-forekomsten og vis rotvinduet. Angi dimensjonene til vinduet til å være 600 piksler bredt og 200 piksler høyt ved å bruke geometri() metode. Angi en passende vindutittel, og forby endring av størrelse.

import tilfeldig
fra tkinter import StringVar, Label, Tk, Entry

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

Deretter setter du opp to par widgets og variabler for å lagre simuleringsresultatene. Appen din vil be om et antall kjøringer for å fullføre. Under hvert løp vil den simulere spillet og registrere resultatet i hvert tilfelle: om spilleren bestemmer seg for å bytte eller beholde det samme valget.

Bruk StringVar(), sett startverdiene for det samme valget og byttet valget til 0. Definer en oppføringswidget og sett skriftstørrelsen til 5. Erklær to etiketter for å vise det samme og byttet valg og plasser det. Erklær to etiketter til som viser verdien av variablene du definerer tidligere. Til slutt plasserer du Entry-widgeten under disse fire etikettene.

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

Etikett (tekst="Samme valg").sted (x=230, y=58)
Etikett (tekst="Byttet valg").sted (x=230, y=90)
Etikett (tekstvariabel=samme_valg, font=(50)).sted (x=350, y=58)
Etikett (tekstvariabel=switched_choice, font=(50)).sted (x=350, y=90)
no_sample.place (x=200, y=120)

Definer en funksjon, simulere. Initialiser resultatvariablene og få prøveverdien angitt av brukeren. Erklær en liste som inneholder elementene dørene vil avsløre.

Innenfor hver kjøring, lag en duplikatliste over de originale dørene og bland den i tilfeldig rekkefølge. Velg en tilfeldig dør og fjern den – dette simulerer spillerens valg. Simuler deretter Montys avsløring: hvis den første døren ikke inneholder premien, åpne den, ellers åpne den andre døren. Fjern det valget og la den gjenværende døren være alternativet å bytte til.

defsimulere(begivenhet):
same_choice_result = 0
switched_choice_result = 0
samples = int (no_sample.get())
dører = ["gull", "geit", "geit"]

til _ i område (prøver):
simulated_doors = doors.copy()
random.shuffle (simulated_doors)
first_choice = random.choice (simulerte_dører)
simulated_doors.remove (førstevalg)
åpnet_dør = simulerte_dører[0] hvis simulerte_dører[0] != "gull"ellers simulerte_dører[1]
simulated_doors.remove (opened_door)
switched_second_choice = simulerte_dører[0]

Hvis førstevalget inneholder den ønskede premien, øker du det samme valgresultatet med ett og reflekterer det på skjermen. Ellers, utfør samme operasjon for det byttede valget.

hvis første_valg == "gull":
same_choice_result += 1
same_choice.set (same_choice_result)
elif switched_second_choice == "gull":
switched_choice_result += 1
switched_choice.set (switched_choice_result)

Et viktig trinn er å binde Enter-tasten med en hendelse i Tkinter-vinduet. Å gjøre det sikrer at når spilleren trykker Tast inn, vil en bestemt funksjon kjøre. For å oppnå dette, bestå streng og simuleringsfunksjonen som parametere til binde() funksjon.

De mainloop() funksjonen forteller Python å kjøre Tkinter-hendelsesløkken og lytte etter hendelser (for eksempel knappetrykk) til du lukker vinduet.

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

Sett alt sammen og kjør programmet ditt for å simulere puslespillet i aksjon.

Utdata fra Monty Hall Simulator ved hjelp av Python

Når du kjører programmet, vil du se et enkelt vindu med etikettene Samme og Switched. Skriv inn et prøvenummer i feltet nederst for å se simulerte resultater. I denne prøven på 3 kjøringer viser programmet at det vinner én gang med samme valg og to ganger med en bryter.

Disse resultatene er tilfeldige, men du kan kjøre simuleringen med en større prøvestørrelse for mer nøyaktighet. I følgende prøvestørrelse på 100 vinner det byttede valget 65 ganger.

Løse problemer ved hjelp av programmering

Monty Hall Simulator er en utmerket demonstrasjon av hvordan du kan bruke programmering til å løse virkelige problemer. Du kan utvikle ulike algoritmer og trene modeller for å utføre spesielle oppgaver som å sortere en matrise eller forbedre et systems effektivitet for optimal produksjon.

Ulike programmeringsspråk tilbyr forskjellige muligheter og funksjoner for å gjøre programmering enklere. Ved å bruke Python kan du lage modeller som kan forutsi fremtidige verdier til et datasett med høyere nøyaktighet. Videre kan du automatisere repeterende operasjoner, redusere kjedelig arbeid og forbedre hastigheten og nøyaktigheten.