Čitatelia ako vy pomáhajú podporovať MUO. Keď uskutočníte nákup pomocou odkazov na našej stránke, môžeme získať pridruženú províziu. Čítaj viac.

Ak ste chlapec zo 70. rokov, možno ste vyrastali pri sledovaní populárnej hernej show Let's Make a Deal. Odvtedy ľudia živo diskutujú o hádanke Monty Hall a bavia sa pri jej replikovaní. Ohromujúce napätie a dráma, ktoré vznikli, keď si súťažiaci vyberá jedny z troch dverí, je vždy zábavné sledovať.

Pomocou matematiky a trochy programovania vytvoríte simulátor Monty Hall pomocou Pythonu. Pomocou toho sa budete môcť raz a navždy rozhodnúť, že výmena dverí zvyšuje vaše šance na výhru.

Čo je problém Monty Hall?

Problém Monty Hall je hlavolam pomenovaný po hostiteľovi hry Monty Hall. Dvere sú tri, z ktorých iba jedna obsahuje požadovanú cenu. Keď si vyberiete dvere, Monty – kto vie, čo je za nimi – otvorí ďalšie dvere a odhalí kozu. Teraz máte možnosť zostať pri svojom pôvodnom rozhodnutí alebo prejsť na iné dvere.

Puzzle Monty Hall je vďaka svojej prekvapivej a nepredvídateľnej povahe veľmi obľúbené. Hoci sa zaoberá pravdepodobnosťami, riešenie sa vymyká intuícii. Slúži ako vynikajúca ukážka toho, aké mätúce môžu byť výpočty pravdepodobnosti. Hádanka nás učí, ako ignorovať dojmy zo zdanlivo náhodných udalostí a namiesto toho sa sústrediť na úvahy a fakty.

instagram viewer

Moduly Random a Tkinter

Ak chcete vytvoriť simuláciu Monty Hall v Pythone, začnite s modulmi Random a Tkinter.

V module Random je niekoľko funkcií na vytváranie náhodných čísel. Tieto algoritmy môžete použiť na generovanie pomiešaných sekvencií, pohybov hry a pseudonáhodných celých čísel. Často sa používa v hry ako ručný kriket, alebo jednoduchý test na písanie, ako aj na simuláciu hodov kockou a na miešanie zoznamov.

Tkinter je predvolená knižnica GUI pre Python. Pomocou neho môžete vytvárať fantastické GUI aplikácie. Môžete si vytvoriť aplikáciu so zoznamom úloh, textový editor alebo jednoduchú kalkulačku. Môžete využiť svoje znalosti v praxi a zdokonaliť svoje programovacie zručnosti pomocou Pythonu a Tkinteru na vytváranie základných desktopových aplikácií.

Otvorte terminál a spustite nasledujúci príkaz na pridanie Tkinter do vášho systému:

pip nainštalovať tkinter

Ako vytvoriť simulátor Monty Hall pomocou Pythonu

Zdrojový kód Monty Hall Simulatoru nájdete v tomto úložisko GitHub.

Importujte moduly random a Tkinter. Funkcia StringVar uľahčuje ovládanie hodnoty miniaplikácie, ako je štítok alebo položka. Štítok môžete použiť na zobrazenie nejakého textu na obrazovke a položku na získanie používateľského vstupu.

Inicializujte inštanciu Tkinter a zobrazte koreňové okno. Pomocou tlačidla nastavte rozmery okna na šírku 600 pixelov a výšku 200 pixelov geometria() metóda. Nastavte vhodný názov okna a zakážte jeho zmenu veľkosti.

importovať náhodný
od tkinter importovať StringVar, Label, Tk, Entry

okno = Tk()
window.geometry("600 x 200")
window.title("Simulácia Monty Hall")
window.sizesable(0, 0)

Ďalej nastavte dva páry miniaplikácií a premenných na ukladanie výsledkov simulácie. Vaša aplikácia si vyžiada určitý počet spustení. Počas každého behu bude simulovať hru a v každom prípade zaznamená výsledok: či sa hráč rozhodne prepnúť alebo ponechať rovnakú voľbu.

Pomocou StringVar() nastavte počiatočné hodnoty rovnakej voľby a prepnite voľbu na 0. Definujte miniaplikáciu Entry a nastavte jej veľkosť písma na 5. Deklarujte dva štítky, aby sa zobrazil rovnaký a prepínaný výber a umiestnite ho. Deklarujte ďalšie dva štítky, ktoré budú zobrazovať hodnotu premenných, ktoré ste predtým definovali. Nakoniec umiestnite miniaplikáciu Vstup pod tieto štyri štítky.

same_choice = StringVar()
Switch_choice = StringVar()
same_choice.set(0)
Switch_choice.set(0)
no_sample = Záznam (font=5)

Označenie (text="Rovnaká voľba").miesto (x=230, y=58)
Označenie (text="Prepnutá voľba").miesto (x=230, y=90)
Označenie (textvariable=rovnaký_výber, font=(50)).miesto (x=350, y=58)
Označenie (textvariable=switched_choice, font=(50)).miesto (x=350, y=90)
no_sample.place (x=200, y=120)

Definujte funkciu, simulovať. Inicializujte výsledné premenné a získajte hodnotu vzorky zadanú používateľom. Vyhláste zoznam, ktorý obsahuje položky, ktoré dvere odhalia.

V rámci každého cyklu vytvorte duplicitný zoznam pôvodných dverí a zamiešajte ho v náhodnom poradí. Vyberte si náhodné dvere a odstráňte ich – to simuluje hráčovu voľbu. Potom simulujte Montyho odhalenie: ak prvé dvere neobsahujú cenu, otvorte ich, inak otvorte druhé dvere. Odstráňte túto voľbu a ponechajte zostávajúce dvierka ako možnosť na prepnutie.

defsimulovať(udalosť):
same_choice_result = 0
Switch_choice_result = 0
vzorky = int (no_sample.get())
dvere = ["zlato", "koza", "koza"]

pre _ v rozsah (vzorky):
simulated_doors = door.copy()
random.shuffle (simulated_doors)
first_choice = random.choice (simulované_dvere)
simulated_doors.remove (first_choice)
otvorené_dvere = simulované_dvere[0] ak simulované_dvere[0] != "zlato"inak simulované_dvere[1]
simulated_doors.remove (opened_door)
Switched_second_choice = simulované_dvere[0]

Ak prvá voľba obsahuje požadovanú cenu, zvýšte rovnaký výsledok voľby o jednu a premietnite ju na obrazovku. V opačnom prípade vykonajte rovnakú operáciu pre prepínanú voľbu.

ak first_choice == "zlato":
same_choice_result += 1
same_choice.set (same_choice_result)
elif Switch_second_choice == "zlato":
Switch_choice_result += 1
Switch_choice.set (switched_choice_result)

Dôležitým krokom je prepojiť kláves Enter s udalosťou v okne Tkinter. Tým sa zabezpečí, že keď hráč stlačí Zadajte, spustí sa konkrétna funkcia. Aby ste to dosiahli, prejdite reťazec a simulovať funkciu ako parametre pre bind() funkciu.

The mainloop() funkcia hovorí Pythonu, aby spustil slučku udalostí Tkinter a počúval udalosti (ako sú stlačenia tlačidiel), kým nezatvoríte okno.

no_sample.bind("", simulovať)
window.mainloop()

Dajte to všetko dohromady a spustite svoj program na simuláciu puzzle v akcii.

Výstup simulátora Monty Hall pomocou Pythonu

Po spustení programu sa zobrazí jednoduché okno s menovkami Rovnaké a Prepnuté. Ak chcete zobraziť simulované výsledky, zadajte číslo vzorky do poľa v spodnej časti. V tejto vzorke 3 behov program ukazuje, že vyhráva raz s rovnakou voľbou a dvakrát s prepínačom.

Tieto výsledky sú náhodné, ale pre väčšiu presnosť môžete simuláciu spustiť s väčšou veľkosťou vzorky. V nasledujúcej veľkosti vzorky 100 prepínaná voľba vyhrá 65-krát.

Riešenie problémov pomocou programovania

Simulátor Monty Hall je vynikajúcou ukážkou toho, ako môžete použiť programovanie na riešenie skutočných problémov. Môžete vyvinúť rôzne algoritmy a trénovať modely na vykonávanie konkrétnych úloh, ako je triedenie poľa alebo zlepšenie efektívnosti systému pre optimálnu produkciu.

Rôzne programovacie jazyky ponúkajú rôzne možnosti a funkcie na uľahčenie programovania. Pomocou Pythonu môžete vytvárať modely, ktoré dokážu predpovedať budúce hodnoty množiny údajov s vyššou presnosťou. Okrem toho môžete automatizovať opakujúce sa operácie, obmedziť nudnú prácu a zvýšiť rýchlosť a presnosť.