Ако сте дете от 70-те години, може би сте израснали, гледайки популярното игрално шоу „Да сключим сделка“. Оттогава хората оживено обсъждат пъзела Monty Hall и се забавляват, докато го копират. Умопомрачаващото напрежение и драма, създадени, докато състезателят избира една от трите врати, са забавни за гледане всеки път.
Използвайки математика и малко програмиране, вие ще създадете симулатор на Monty Hall с помощта на Python. Използвайки това, ще можете да решите веднъж завинаги, че смяната на вратите увеличава шансовете ви за печалба.
Какъв е проблемът на Монти Хол?
Проблемът на Монти Хол е мозъчна закачка, кръстена на водещия на шоуто за игри Монти Хол. Има три врати, само една от които съдържа желана награда. След като изберете врата, Монти - кой знае какво има зад тях - отваря друга врата, разкривайки коза. Вече имате възможност да се придържате към първоначалното си решение или да преминете към другата врата.
Поради своята изненадваща и непредсказуема природа, пъзелът Monty Hall е много популярен. Въпреки че се занимава с вероятности, решението противоречи на интуицията. Той служи като отлична демонстрация на това колко объркващи могат да бъдат изчисленията на вероятностите. Пъзелът ни учи как да игнорираме впечатления от привидно случайни събития и вместо това да се фокусираме върху разсъжденията и фактите.
Модулите Random и Tkinter
За да създадете симулация на Monty Hall в Python, започнете с модулите Random и Tkinter.
Има няколко функции за създаване на случайни числа в модула Random. Можете да използвате тези алгоритми за генериране на разбъркани последователности, движения на играта и псевдослучайни цели числа. Често се използва в игри като ръчен крикет, или прост тест за писане, както и за симулиране на хвърляне на зарове и за разбъркване на списъци.
Tkinter е GUI библиотеката по подразбиране за Python. Използвайки го, можете да създавате фантастични GUI приложения. Може да създадете приложение за списък със задачи, текстов редактор или прост калкулатор. Можете да приложите знанията си на практика и да усъвършенствате уменията си за програмиране, като използвате Python и Tkinter, за да създавате основни приложения за настолни компютри.
Отворете терминал и изпълнете следната команда, за да добавите Tkinter към вашата система:
pip инсталирайте tkinter
Как да създадете симулатор Monty Hall с помощта на Python
Тук можете да намерите изходния код на симулатора Monty Hall GitHub хранилище.
Импортирайте модулите random и Tkinter. Функцията StringVar улеснява контролирането на стойността на изпълним модул като Label или Entry. Можете да използвате етикет, за да покажете някакъв текст на екрана, и запис, за да извлечете въведеното от потребителя.
Инициализирайте екземпляра на Tkinter и покажете основния прозорец. Задайте размерите на прозореца да бъдат 600 пиксела широк и 200 пиксела висок, като използвате геометрия() метод. Задайте подходящо заглавие на прозореца и забранете преоразмеряването му.
импортиране случаен
от tkinter импортиране StringVar, Label, Tk, Entry
прозорец = Tk()
window.geometry("600x200")
window.title("Симулация на Монти Хол")
window.resizable(0, 0)
След това настройте две двойки модули и променливи за съхраняване на резултатите от симулацията. Вашето приложение ще поиска определен брой изпълнения, за да завърши. По време на всяко изпълнение той ще симулира играта и ще записва резултата във всеки случай: дали играчът реши да смени или да запази същия избор.
Използвайки StringVar(), задайте първоначалните стойности на същия избор и превключете избора на 0. Дефинирайте изпълним модул Entry и задайте размера на шрифта му на 5. Декларирайте два етикета за показване на един и същ и променения избор и го позиционирайте. Декларирайте още два етикета, които ще показват стойността на променливите, които дефинирате по-рано. Накрая позиционирайте изпълнимия модул Entry под тези четири етикета.
същия_избор = StringVar()
switched_choice = StringVar()
същия_избор.set(0)
switched_choice.set(0)
no_sample = Запис (font=5)
Етикет (текст=„Същият избор“).място (x=230, y=58)
Етикет (текст=„Променен избор“).място (x=230, y=90)
Етикет (textvariable=same_choice, font=(50)).място (x=350, y=58)
Етикет (textvariable=switched_choice, font=(50)).място (x=350, y=90)
no_sample.place (x=200, y=120)
Дефинирайте функция, симулира. Инициализирайте резултатните променливи и вземете примерната стойност, въведена от потребителя. Декларирайте списък, който съдържа елементите, които вратите ще разкрият.
В рамките на всяко изпълнение направете дублиран списък на оригиналните врати и го разбъркайте в произволен ред. Изберете произволна врата и я премахнете - това симулира избора на играча. След това симулирайте разкритието на Монти: ако първата врата не съдържа наградата, отворете я, в противен случай отворете втората врата. Премахнете този избор и оставете оставащата врата като опция за превключване.
дефсимулира(събитие):
същия_избор_резултат = 0
switched_choice_result = 0
образци = int (no_sample.get())
врати = ["злато", "коза", "коза"]
за _ в гама (мостри):
simulated_doors = doors.copy()
random.shuffle (симулирани_врати)
first_choice = random.choice (симулирани_врати)
simulated_doors.remove (първи_избор)
отворена_врата = симулирани_врати[0] ако симулирани_врати[0] != "злато"друго симулирани_врати[1]
simulated_doors.remove (opened_door)
switched_second_choice = симулирани_врати[0]
Ако първият избор съдържа желаната награда, увеличете резултата от същия избор с единица и го отразете на екрана. В противен случай изпълнете същата операция за превключения избор.
ако първи_избор == "злато":
същия_избор_резултат += 1
same_choice.set (same_choice_result)
елиф превключен_втори_избор == "злато":
switched_choice_result += 1
switched_choice.set (switched_choice_result)
Важна стъпка е да свържете клавиша Enter със събитие в прозореца на Tkinter. Това гарантира, че когато играчът натисне Въведете, ще се изпълнява определена функция. За да постигнете това, преминете към
The mainloop() функцията казва на Python да стартира цикъла на събитията на Tkinter и да слуша за събития (като натискания на бутони), докато затворите прозореца.
no_sample.bind("" , симулиране)
window.mainloop()
Съберете всичко заедно и стартирайте вашата програма, за да симулирате пъзела в действие.
Резултат от симулатора на Monty Hall с помощта на Python
При стартиране на програмата ще видите прост прозорец с етикети за същия и превключен избор. Въведете примерен номер в полето в долната част, за да видите симулирани резултати. В тази проба от 3 изпълнения програмата показва, че печели веднъж с един и същ избор и два пъти с превключване.
Тези резултати са произволни, но можете да стартирате симулацията с по-голям размер на извадката за по-голяма точност. В следния размер на извадката от 100 смененият избор печели 65 пъти.
Разрешаване на проблеми чрез програмиране
Симулаторът Monty Hall е отлична демонстрация на това как можете да използвате програмиране за решаване на проблеми от реалния живот. Можете да разработите различни алгоритми и да обучите модели за изпълнение на конкретни задачи като сортиране на масив или подобряване на ефективността на системата за оптимално производство.
Различните езици за програмиране предлагат различни възможности и функции, за да улеснят програмирането. Използвайки Python, можете да създавате модели, които могат да предскажат бъдещите стойности на набор от данни с по-висока точност. Освен това можете да автоматизирате повтарящи се операции, да намалите скучната работа и да подобрите скоростта и точността.