A hozzád hasonló olvasók támogatják a MUO-t. Amikor a webhelyünkön található linkek használatával vásárol, társult jutalékot kaphatunk. Olvass tovább.

Ha Ön egy 70-es évekbeli gyerek, lehet, hogy úgy nőtt fel, hogy nézte a népszerű játékműsort, a Let's Make a Deal. Azóta az emberek élénken megvitatják a Monty Hall-rejtvényt, és jól érzik magukat a reprodukálással. Az elképesztő feszültség és dráma, amely akkor keletkezik, amikor a versenyző kiválaszt egyet a három ajtó közül, minden alkalommal szórakoztató nézni.

A matematika és egy kis programozás segítségével meg fogsz építeni egy Monty Hall szimulátort Python segítségével. Ennek segítségével egyszer s mindenkorra eldöntheti, hogy az ajtók cseréje növeli a nyerési esélyeit.

Mi a Monty Hall probléma?

A Monty Hall probléma egy fejtörő, amelyet a gameshow házigazdájáról, Monty Hallról neveztek el. Három ajtó van, amelyek közül csak az egyikben van a kívánt nyeremény. Miután kiválasztott egy ajtót, Monty – ki tudja, mi van mögötte – kinyit egy másik ajtót, és egy kecskét tár elénk. Most lehetősége van kitartani eredeti döntése mellett, vagy áttérni a másik ajtóra.

instagram viewer

Meglepő és kiszámíthatatlan természete miatt a Monty Hall puzzle nagyon népszerű. Bár a valószínűségekkel foglalkozik, a megoldás dacol az intuícióval. Kiválóan demonstrálja, hogy a valószínűségszámítások milyen zavarosak lehetnek. A rejtvény megtanít bennünket arra, hogyan hagyjuk figyelmen kívül a véletlenszerűnek tűnő események benyomásait, és ehelyett az érvelésre és a tényekre koncentráljunk.

A véletlenszerű és a Tkinter modulok

A Monty Hall szimuláció Pythonban való felépítéséhez kezdje a Random és a Tkinter modulokkal.

A Random modulban több funkció is található véletlen számok előállítására. Ezekkel az algoritmusokkal kevert sorozatokat, játékmozgásokat és pszeudo-véletlen egész számokat hozhat létre. Gyakran használják játékok, mint a kézi krikett, vagy egyszerű gépelési teszt, valamint a kockadobások szimulálására és a listák keverésére.

A Tkinter a Python alapértelmezett grafikus felhasználói felületének könyvtára. Használatával fantasztikus GUI-alkalmazásokat készíthet. Létrehozhat egy teendőlista alkalmazást, szövegszerkesztőt vagy egyszerű számológépet. A Python és a Tkinter használatával gyakorlatba ültetheti tudását, és tökéletesítheti programozási készségeit az alapvető asztali alkalmazások létrehozásához.

Nyisson meg egy terminált, és futtassa a következő parancsot a Tkinter hozzáadásához a rendszerhez:

pip install tkinter

Monty Hall szimulátor készítése Python használatával

A Monty Hall Simulator forráskódja ebben található GitHub adattár.

Importálja a véletlenszerű és a Tkinter modulokat. A StringVar függvény megkönnyíti a widgetek, például a címke vagy bejegyzés értékének szabályozását. Használhat egy címkét szöveg megjelenítésére a képernyőn, és egy bejegyzést a felhasználói bevitel lekéréséhez.

Inicializálja a Tkinter-példányt, és jelenítse meg a gyökérablakot. Állítsa be az ablak méretét 600 pixel szélesre és 200 pixel magasra a geometria() módszer. Állítson be megfelelő ablakcímet, és tiltsa le az átméretezést.

import véletlen
tól től tkinter import StringVar, Label, Tk, Entry

ablak = Tk()
window.geometry("600x200")
window.title("Monty Hall szimuláció")
window.resizable(0, 0)

Ezután állítson be két pár widgetet és változót a szimulációs eredmények tárolására. Az alkalmazás számos futtatást kér a befejezéshez. Minden futás során szimulálja a játékot, és minden esetben rögzíti az eredményt: hogy a játékos úgy dönt-e, hogy vált, vagy megtartja ugyanazt a választást.

A StringVar() segítségével állítsa be ugyanazon és a váltott választás kezdeti értékeit 0-ra. Adjon meg egy Bejegyzés widgetet, és állítsa a betűméretét 5-re. Deklaráljon két címkét, hogy ugyanazt és a váltott opciót jelenítse meg, és helyezze el. Deklaráljon további két címkét, amelyek a korábban meghatározott változók értékét jelenítik meg. Végül helyezze az Entry widgetet e négy címke alá.

same_choice = StringVar()
switched_choice = StringVar()
same_choice.set(0)
switched_choice.set(0)
no_sample = Bejegyzés (font=5)

Címke (szöveg="Ugyanez a választás").hely (x=230, y=58)
Címke (szöveg="Váltott választás").hely (x=230, y=90)
Címke (textvariable=same_choice, font=(50)).hely (x=350, y=58)
Címke (textvariable=switched_choice, font=(50)).hely (x=350, y=90)
no_sample.place (x=200, y=120)

Határozzon meg egy függvényt, szimulálni. Inicializálja az eredményváltozókat, és kérje le a felhasználó által beírt mintaértéket. Nyilatkozz egy listát, amely tartalmazza azokat az elemeket, amelyeket az ajtók feltárnak.

Minden egyes futáson belül készítsen egy duplikált listát az eredeti ajtókról, és keverje meg véletlenszerű sorrendben. Válasszon ki egy véletlenszerű ajtót, és távolítsa el – ez szimulálja a játékos választását. Ezután szimulálja Monty felfedését: ha az első ajtó nem tartalmazza a nyereményt, nyissa ki, ellenkező esetben nyissa ki a második ajtót. Távolítsa el ezt a lehetőséget, és hagyja meg a fennmaradó ajtót a váltás lehetőségének.

defszimulálni(esemény):
same_choice_result = 0
switched_choice_result = 0
minták = int (no_sample.get())
ajtók = ["Arany", "kecske", "kecske"]

számára _ ban ben tartomány (minták):
szimulált_ajtók = ajtók.copy()
random.shuffle (szimulált_ajtók)
első_választás = random.choice (szimulált_ajtók)
simulated_doors.remove (első_választás)
nyitott_ajtó = szimulált_ajtók[0] ha szimulált_ajtók[0] != "Arany"más szimulált_ajtók[1]
simulated_doors.remove (nyitott_ajtó)
switched_second_choice = szimulált_ajtók[0]

Ha az első választás tartalmazza a kívánt nyereményt, növelje ugyanazt a választási eredményt eggyel, és tükrözze a képernyőn. Ellenkező esetben hajtsa végre ugyanazt a műveletet a kapcsolt választásnál.

ha első_választás == "Arany":
azonos_választási_eredmény += 1
same_choice.set (same_choice_result)
elif switched_second_choice == "Arany":
switched_choice_result += 1
switched_choice.set (switched_choice_result)

Fontos lépés, hogy az Enter billentyűt egy eseménnyel kösse össze a Tkinter ablakban. Ezzel biztosítja, hogy amikor a játékos megnyomja Belép, egy adott funkció fog futni. Ennek eléréséhez adja át a karakterlánc és a szimulációs függvény paraméterei a bind() funkció.

A mainloop() függvény arra utasítja a Pythont, hogy futtassa a Tkinter eseményhurkot, és figyelje az eseményeket (például a gombnyomásokat), amíg be nem zárja az ablakot.

no_sample.bind("", szimulálni)
window.mainloop()

Állítsa össze az egészet, és futtassa a programot, hogy működés közben szimulálja a rejtvényt.

A Monty Hall szimulátor kimenete Python használatával

A program futtatásakor egy egyszerű ablak jelenik meg az Ugyanaz és a Váltott választás címkékkel. A szimulált eredmények megtekintéséhez írja be a minta számát az alsó mezőbe. Ebben a 3 futásból álló mintában a program azt mutatja, hogy egyszer nyer ugyanazzal a választással és kétszer egy kapcsolóval.

Ezek az eredmények véletlenszerűek, de a pontosság érdekében nagyobb mintamérettel is futtathatja a szimulációt. A következő 100-as mintaméretben a váltott választás 65-ször nyer.

Problémák megoldása programozás segítségével

A Monty Hall szimulátor kiválóan mutatja be, hogyan használhatja fel a programozást valós problémák megoldására. Különféle algoritmusokat fejleszthet és modelleket betaníthat bizonyos feladatok elvégzésére, például egy tömb rendezésére vagy a rendszer hatékonyságának javítására az optimális termelés érdekében.

A különböző programozási nyelvek különböző képességeket és funkciókat kínálnak a programozás megkönnyítése érdekében. A Python használatával olyan modelleket hozhat létre, amelyek nagyobb pontossággal tudják megjósolni egy adatkészlet jövőbeli értékeit. Ezenkívül automatizálhatja az ismétlődő műveleteket, csökkentheti az unalmas munkát, valamint javíthatja a sebességet és a pontosságot.