Hvis du er et 70'er-barn, er du måske vokset op med at se det populære spilprogram, Let's Make a Deal. Siden da diskuterer folk livligt Monty Hall-puslespillet og har det sjovt med at replikere det. Den forbløffende spænding og drama, der skabes, da deltageren vælger en af de tre døre, er sjov at se hver gang.
Ved hjælp af matematik og en lille smule programmering skal du bygge en Monty Hall Simulator ved hjælp af Python. Ved at bruge dette, vil du være i stand til én gang for alle at beslutte, at det øger dine chancer for at vinde, hvis du skifter dørene.
Hvad er Monty Hall-problemet?
Monty Hall-problemet er en hjernevrider opkaldt efter spilværten Monty Hall. Der er tre låger, hvoraf kun den ene indeholder en ønsket præmie. Når du har valgt en dør, åbner Monty - hvem ved, hvad der er bag dem - en anden dør og afslører en ged. Du har nu mulighed for at holde fast i din oprindelige beslutning eller skifte til den anden dør.
På grund af dets overraskende og uforudsigelige karakter er Monty Hall-puslespillet meget populært. Selvom det handler om sandsynligheder, trodser løsningen intuitionen. Det fungerer som en fremragende demonstration af, hvor forvirrende sandsynlighedsberegninger kan være. Puslespillet lærer os, hvordan man kan ignorere indtryk af tilsyneladende tilfældige hændelser og i stedet fokusere på ræsonnement og fakta.
Random- og Tkinter-modulerne
For at bygge en Monty Hall-simulering i Python skal du starte med Random- og Tkinter-modulerne.
Der er flere funktioner til fremstilling af tilfældige tal i Random-modulet. Du kan bruge disse algoritmer til at generere blandede sekvenser, spilbevægelser og pseudo-tilfældige heltal. Det bruges ofte i spil som håndcricket, eller en simpel skrivetest, samt at simulere terningkast og at blande lister.
Tkinter er standard GUI-biblioteket for Python. Ved at bruge det kan du bygge fantastiske GUI-applikationer. Du kan oprette en opgaveliste-app, teksteditor eller simpel lommeregner. Du kan omsætte din viden i praksis og finpudse dine programmeringsevner ved at bruge Python og Tkinter til at konstruere grundlæggende desktop-apps.
Åbn en terminal og kør følgende kommando for at tilføje Tkinter til dit system:
pip installer tkinter
Sådan bygger du en Monty Hall-simulator ved hjælp af Python
Du kan finde kildekoden til Monty Hall Simulator i denne GitHub-depot.
Importer de tilfældige og Tkinter-moduler. StringVar-funktionen gør det nemmere at kontrollere værdien af en widget som f.eks. en etiket eller indgang. Du kan bruge en etiket til at vise noget tekst på skærmen og en indtastning til at hente brugerinput.
Initialiser Tkinter-forekomsten og vis rodvinduet. Indstil vinduets dimensioner til at være 600 pixels bredt og 200 pixels højt ved hjælp af geometri() metode. Indstil en passende vinduestitel, og forbyd dens størrelsesændring.
importere tilfældig
fra tkinter importere StringVar, Label, Tk, Entry
vindue = Tk()
window.geometry("600x200")
window.title("Monty Hall Simulation")
window.resizable(0, 0)
Derefter skal du opsætte to par widgets og variabler for at gemme simuleringsresultaterne. Din app vil bede om et antal kørsler at gennemføre. Under hvert løb vil det simulere spillet og registrere resultatet i hvert enkelt tilfælde: om spilleren beslutter sig for at skifte eller beholde det samme valg.
Brug StringVar(), indstil startværdierne for det samme valg og skiftede valg til 0. Definer en Entry-widget, og indstil dens skriftstørrelse til 5. Erklær to etiketter for at vise det samme og det skiftede valg, og placer det. Erklær to etiketter mere, der viser værdien af de variabler, du definerer tidligere. Til sidst skal du placere Entry-widgetten under disse fire etiketter.
same_choice = StringVar()
switched_choice = StringVar()
samme_valg.sæt(0)
switched_choice.set(0)
no_sample = Entry (font=5)
Etiket (tekst="Samme valg").place (x=230, y=58)
Etiket (tekst="Skiftet valg").place (x=230, y=90)
Etiket (tekstvariabel=samme_valg, skrifttype=(50)).place (x=350, y=58)
Etiket (tekstvariabel=switched_choice, font=(50)).place (x=350, y=90)
no_sample.place (x=200, y=120)
Definer en funktion, simulere. Initialiser resultatvariablerne og få prøveværdien indtastet af brugeren. Erklær en liste, der indeholder de elementer, dørene vil afsløre.
Inden for hver kørsel skal du lave en duplikatliste over de originale døre og blande den i en tilfældig rækkefølge. Vælg en tilfældig dør og fjern den - dette simulerer spillerens valg. Simuler derefter Montys afsløring: hvis den første dør ikke indeholder præmien, skal du åbne den, ellers åbne den anden dør. Fjern det valg, og lad den resterende dør være muligheden for at skifte til.
defsimulere(begivenhed):
same_choice_result = 0
switched_choice_result = 0
samples = int (no_sample.get())
døre = ["guld", "ged", "ged"]
til _ i interval (prøver):
simulated_doors = doors.copy()
random.shuffle (simulerede_døre)
first_choice = random.choice (simulerede_døre)
simulated_doors.remove (first_choice)
åbnet_dør = simulerede_døre[0] hvis simulerede_døre[0] != "guld"andet simulerede_døre[1]
simulated_doors.remove (åbnet_dør)
switched_second_choice = simulerede_døre[0]
Hvis det første valg indeholder den ønskede præmie, skal du øge det samme valgresultat med én og afspejle det på skærmen. Ellers skal du udføre den samme handling for det skiftede valg.
hvis første_valg == "guld":
same_choice_result += 1
same_choice.set (same_choice_result)
elif switched_second_choice == "guld":
switched_choice_result += 1
switched_choice.set (switched_choice_result)
Et vigtigt skridt er at binde Enter-tasten til en begivenhed i Tkinter-vinduet. Dette sikrer, at når afspilleren trykker Gå ind, vil en bestemt funktion køre. For at opnå dette, bestå
Det mainloop() funktion fortæller Python at køre Tkinter-hændelsesløkken og lytte efter hændelser (såsom knaptryk), indtil du lukker vinduet.
no_sample.bind("" , simulere)
window.mainloop()
Sæt det hele sammen og kør dit program for at simulere puslespillet i aktion.
Output af Monty Hall Simulator ved hjælp af Python
Når du kører programmet, vil du se et simpelt vindue med etiketterne Samme og Switched. Indtast et prøvenummer i feltet nederst for at se simulerede resultater. I denne prøve på 3 kørsler viser programmet, at det vinder én gang med det samme valg og to gange med en switch.
Disse resultater er tilfældige, men du kan køre simuleringen med en større stikprøvestørrelse for mere nøjagtighed. I den følgende prøvestørrelse på 100 vinder det skiftede valg 65 gange.
Løsning af problemer ved hjælp af programmering
Monty Hall Simulator er en fremragende demonstration af, hvordan du kan bruge programmering til at løse virkelige problemer. Du kan udvikle forskellige algoritmer og træne modeller til at udføre bestemte opgaver som at sortere et array eller forbedre et systems effektivitet for optimal produktion.
Forskellige programmeringssprog tilbyder forskellige muligheder og funktioner for at gøre programmering lettere. Ved hjælp af Python kan du oprette modeller, der kan forudsige fremtidige værdier af et datasæt med højere nøjagtighed. Desuden kan du automatisere gentagne operationer, mindske kedeligt arbejde og forbedre hastighed og nøjagtighed.