Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti. Přečtěte si více.

Pokud jste dítě ze 70. let, možná jste vyrostli při sledování populární herní show Let's Make a Deal. Od té doby lidé živě diskutují o Monty Hallově hlavolamu a baví se jeho replikací. Úchvatné napětí a drama vytvořené, když si soutěžící vybere jedny ze tří dveří, je pokaždé zábavné sledovat.

Pomocí matematiky a trochy programování vytvoříte Monty Hall Simulator pomocí Pythonu. Díky tomu se budete moci jednou provždy rozhodnout, že výměna dveří zvyšuje vaše šance na výhru.

Co je problém Monty Hall?

Problém Montyho Halla je hlavolam pojmenovaný po hostiteli gameshow, Monty Hall. Jsou zde troje dveře, z nichž pouze jedna obsahuje požadovanou cenu. Jakmile si vyberete dveře, Monty – kdo ví, co je za nimi – otevře další dveře a odhalí kozu. Nyní máte možnost zůstat u svého původního rozhodnutí nebo přejít na jiné dveře.

Díky své překvapivé a nepředvídatelné povaze je puzzle Monty Hall velmi oblíbené. Přestože se zabývá pravděpodobnostmi, řešení se vymyká intuici. Slouží jako vynikající ukázka toho, jak matoucí mohou být výpočty pravděpodobnosti. Hádanka nás učí, jak ignorovat dojmy ze zdánlivě náhodných událostí a místo toho se soustředit na úvahy a fakta.

instagram viewer

Moduly Random a Tkinter

Chcete-li vytvořit simulaci Monty Hall v Pythonu, začněte s moduly Random a Tkinter.

V modulu Random je několik funkcí pro vytváření náhodných čísel. Tyto algoritmy můžete použít ke generování zamíchaných sekvencí, herních pohybů a pseudonáhodných celých čísel. Často se používá v hry jako ruční kriketnebo jednoduchý test na psaní, stejně jako k simulaci hodů kostkou a k zamíchání seznamů.

Tkinter je výchozí knihovna GUI pro Python. S jeho pomocí můžete vytvářet fantastické GUI aplikace. Můžete vytvořit aplikaci se seznamem úkolů, textový editor nebo jednoduchou kalkulačku. Své znalosti můžete uplatnit v praxi a zdokonalit své programátorské dovednosti pomocí Pythonu a Tkinteru k vytváření základních desktopových aplikací.

Otevřete terminál a spusťte následující příkaz pro přidání Tkinter do vašeho systému:

pip nainstalovat tkinter

Jak vytvořit simulátor Monty Hall pomocí Pythonu

Zdrojový kód Monty Hall Simulatoru najdete v tomto úložiště GitHub.

Importujte moduly random a Tkinter. Funkce StringVar usnadňuje ovládání hodnoty widgetu, jako je štítek nebo položka. Můžete použít štítek k zobrazení nějakého textu na obrazovce a položku k načtení uživatelského vstupu.

Inicializujte instanci Tkinter a zobrazte kořenové okno. Pomocí tlačítka nastavte rozměry okna na šířku 600 pixelů a výšku 200 pixelů geometrie() metoda. Nastavte vhodný název okna a zakažte jeho změnu velikosti.

import náhodný
z tkinter import StringVar, Label, Tk, Entry

okno = Tk()
window.geometry("600x200")
window.title("Simulace Monty Hall")
window.sizeable(0, 0)

Dále nastavte dva páry widgetů a proměnných pro uložení výsledků simulace. Vaše aplikace si vyžádá několik běhů k dokončení. Během každého běhu bude simulovat hru a v každém případě zaznamená výsledek: zda se hráč rozhodne přepnout nebo ponechat stejnou volbu.

Pomocí StringVar() nastavte počáteční hodnoty stejné volby a přepněte volbu na 0. Definujte widget Entry a nastavte jeho velikost písma na 5. Deklarujte dva štítky, aby se zobrazovaly stejné a přepnutá volba, a umístěte je. Deklarujte dva další štítky, které budou zobrazovat hodnotu proměnných, které jste definovali dříve. Nakonec umístěte widget Vstup pod tyto čtyři štítky.

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

Štítek (text="Stejná volba").místo (x=230, y=58)
Štítek (text="Přepnutá volba").místo (x=230, y=90)
Štítek (textvariable=same_choice, font=(50)).místo (x=350, y=58)
Štítek (textvariable=switched_choice, font=(50)).místo (x=350, y=90)
no_sample.place (x=200, y=120)

Definujte funkci, simulovat. Inicializujte výsledné proměnné a získejte hodnotu vzorku zadanou uživatelem. Uveďte seznam, který obsahuje položky, které dveře odhalí.

V rámci každého běhu vytvořte duplicitní seznam původních dveří a zamíchejte jej v náhodném pořadí. Vyberte si náhodné dveře a odstraňte je – to simuluje volbu hráče. Poté simulujte Montyho odhalení: pokud první dveře neobsahují cenu, otevřete je, jinak otevřete druhé dveře. Odstraňte tuto volbu a ponechte zbývající dvířka jako možnost přepnutí.

defsimulovat(událost):
same_choice_result = 0
Switch_choice_result = 0
vzorky = int (no_sample.get())
dveře = ["zlato", "koza", "koza"]

pro _ v rozsah (ukázky):
simulated_doors = door.copy()
random.shuffle (simulované_dveře)
first_choice = random.choice (simulované_dveře)
simulated_doors.remove (first_choice)
open_door = simulované_dveře[0] -li simulované_dveře[0] != "zlato"jiný simulované_dveře[1]
simulated_doors.remove (opened_door)
Switched_second_choice = simulované_dveře[0]

Pokud první volba obsahuje požadovanou cenu, zvyšte stejný výsledek volby o jednu a promítněte ji na obrazovku. Jinak proveďte stejnou operaci pro přepínanou volbu.

-li first_choice == "zlato":
same_choice_result += 1
same_choice.set (same_choice_result)
elif Switch_second_choice == "zlato":
Switch_choice_result += 1
Switched_choice.set (switched_choice_result)

Důležitým krokem je svázat klávesu Enter s událostí v okně Tkinter. Tím zajistíte, že když hráč stiskne Vstupte, spustí se konkrétní funkce. Chcete-li toho dosáhnout, předejte řetězec a simulovat funkci jako parametry k svázat() funkce.

The mainloop() Funkce říká Pythonu, aby spustil smyčku událostí Tkinter a poslouchal události (jako je stisknutí tlačítka), dokud nezavřete okno.

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

Dejte to všechno dohromady a spusťte svůj program pro simulaci puzzle v akci.

Výstup simulátoru Monty Hall pomocí Pythonu

Při spuštění programu se zobrazí jednoduché okno s popisky volby Stejné a Přepnuto. Chcete-li zobrazit simulované výsledky, zadejte číslo vzorku do pole ve spodní části. V tomto vzorku 3 běhů program ukazuje, že vyhrává jednou se stejnou volbou a dvakrát s přepínačem.

Tyto výsledky jsou náhodné, ale pro větší přesnost můžete simulaci spustit s větší velikostí vzorku. V následující velikosti vzorku 100 přepnutá volba vyhraje 65krát.

Řešení problémů pomocí programování

Monty Hall Simulator je vynikající ukázkou toho, jak můžete použít programování k řešení skutečných problémů. Můžete vyvíjet různé algoritmy a trénovat modely pro provádění konkrétních úkolů, jako je třídění pole nebo zlepšování efektivity systému pro optimální produkci.

Různé programovací jazyky nabízejí různé možnosti a funkce, které usnadňují programování. Pomocí Pythonu můžete vytvářet modely, které dokážou předvídat budoucí hodnoty datové sady s vyšší přesností. Kromě toho můžete automatizovat opakované operace, omezit nudnou práci a zlepšit rychlost a přesnost.