Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.

Если вы ребенок 70-х, возможно, вы выросли на популярном игровом шоу «Давай заключим сделку». С тех пор люди оживленно обсуждают головоломку Монти Холла и с удовольствием копируют ее. Невероятное напряжение и драма, возникающие, когда участник выбирает одну из трех дверей, каждый раз интересно наблюдать.

Используя математику и немного программирования, вы собираетесь создать симулятор Монти Холла с помощью Python. Используя это, вы сможете раз и навсегда решить, что переключение дверей увеличивает ваши шансы на победу.

Что такое проблема Монти Холла?

Проблема Монти Холла — головоломка, названная в честь ведущего игрового шоу Монти Холла. Есть три двери, только одна из которых содержит желанный приз. Как только вы выбираете дверь, Монти — который знает, что за ними — открывает другую дверь, показывая козу. Теперь у вас есть возможность придерживаться своего первоначального решения или переключиться на другую дверь.

instagram viewer

Благодаря своему удивительному и непредсказуемому характеру головоломка Монти Холл очень популярна. Хотя оно имеет дело с вероятностями, решение не поддается интуиции. Это служит отличной демонстрацией того, насколько запутанными могут быть расчеты вероятностей. Головоломка учит нас, как игнорировать впечатления от, казалось бы, случайных событий и вместо этого сосредоточиться на рассуждениях и фактах.

Модули Random и Tkinter

Чтобы создать симуляцию Монти Холла на Python, начните с модулей Random и Tkinter.

В модуле Random есть несколько функций для создания случайных чисел. Вы можете использовать эти алгоритмы для создания перетасованных последовательностей, игровых движений и псевдослучайных целых чисел. Он часто используется в игры, такие как ручной крикет, или простой тест набора текста, а также для имитации бросков костей и перемешивания списков.

Tkinter — это библиотека GUI по умолчанию для Python. Используя его, вы можете создавать фантастические приложения с графическим интерфейсом. Вы можете создать приложение со списком дел, текстовый редактор или простой калькулятор. Вы можете применить свои знания на практике и отточить свои навыки программирования, используя Python и Tkinter для создания базовых настольных приложений.

Откройте терминал и выполните следующую команду, чтобы добавить Tkinter в вашу систему:

пип установить ткинтер

Как создать симулятор Монти Холла с помощью Python

Вы можете найти исходный код симулятора Монти Холла в этом Репозиторий GitHub.

Импортируйте модули random и Tkinter. Функция StringVar упрощает управление значением виджета, такого как метка или запись. Вы можете использовать Label для отображения текста на экране и Entry для получения пользовательского ввода.

Инициализируйте экземпляр Tkinter и отобразите корневое окно. Установите размеры окна 600 пикселей в ширину и 200 пикселей в высоту с помощью геометрия() метод. Установите соответствующий заголовок окна и запретите изменение его размера.

Импортировать случайный
от ткинтер Импортировать StringVar, Label, Tk, Entry

окно = Тк()
окно.геометрия("600x200")
окно.название("Моделирование Монти Холла")
окно.изменяемый размер(0, 0)

Затем настройте две пары виджетов и переменных для хранения результатов моделирования. Ваше приложение попросит выполнить несколько запусков. Во время каждого запуска он будет имитировать игру и записывать результат в каждом случае: решает ли игрок переключиться или оставить тот же выбор.

Используя StringVar(), установите начальные значения того же выбора и переключите выбор на 0. Определите виджет Entry и установите для него размер шрифта 5. Объявите две метки для отображения одного и того же переключаемого варианта и поместите его. Объявите еще две метки, которые будут отображать значения переменных, которые вы определили ранее. Наконец, поместите виджет Entry под этими четырьмя метками.

тот же_выбор = StringVar()
Switch_choice = StringVar()
тот же_выбор.set(0)
Switch_choice.set(0)
no_sample = Запись (шрифт=5)

Метка (текст="Тот же выбор").место (х=230, у =58)
Метка (текст=«Переключенный выбор»).место (х=230, у =90)
Метка (текстовая переменная=same_choice, шрифт=(50)).место (х=350, у =58)
Метка (textvariable=switched_choice, font=(50)).место (х=350, у =90)
no_sample.place (x=200, у =120)

Определите функцию, имитировать. Инициализируйте переменные результата и получите значение выборки, введенное пользователем. Объявите список, содержащий предметы, которые откроют двери.

В каждом прогоне создавайте дубликат списка исходных дверей и перемешивайте его в случайном порядке. Выберите случайную дверь и удалите ее — это имитирует выбор игрока. Затем смоделируйте раскрытие Монти: если в первой двери нет приза, откройте ее, в противном случае откройте вторую дверь. Удалите этот выбор и оставьте оставшуюся дверь в качестве опции для переключения.

дефимитировать(событие):
тот же_выбор_результата = 0
Switch_choice_result = 0
образцы = целое число (no_sample.get())
двери = ["золото", "козел", "козел"]

для _ в диапазон (образцы):
смоделированные_двери = door.copy()
random.shuffle (симулированные_двери)
first_choice = random.choice (симулированные_двери)
симулированные_двери.удалить (first_choice)
open_door = смоделированные_двери[0] если смоделированные_двери[0] != "золото"еще смоделированные_двери[1]
симулированные_двери.удалить (открытая_дверь)
Switch_second_choice = симулированные_двери[0]

Если первый выбор содержит желаемый приз, увеличьте тот же результат выбора на единицу и отразите его на экране. В противном случае выполните ту же операцию для переключаемого выбора.

если первый_выбор == "золото":
тот же_выбор_результата += 1
same_choice.set (тот же_выбор_результата)
Элиф Switch_second_choice == "золото":
Switch_choice_result += 1
Switched_choice.set (switched_choice_result)

Важным шагом является привязка клавиши Enter к событию в окне Tkinter. Это гарантирует, что когда игрок нажимает Входить, будет запущена определенная функция. Для этого пройдите строка и функция имитации в качестве параметров для связывать() функция.

основной цикл () Функция сообщает Python запустить цикл событий Tkinter и прослушивать события (например, нажатия кнопок), пока вы не закроете окно.

no_sample.bind("", симулировать)
окно.mainloop()

Соберите все вместе и запустите программу, чтобы смоделировать головоломку в действии.

Вывод симулятора Монти Холла с использованием Python

Запустив программу, вы увидите простое окно с метками выбора Same и Switched. Введите номер образца в поле внизу, чтобы просмотреть смоделированные результаты. В этом примере из 3 запусков программа показывает, что она выиграла один раз с одним и тем же выбором и дважды с переключением.

Эти результаты являются случайными, но вы можете запустить моделирование с большим размером выборки для большей точности. В следующей выборке из 100 вариантов с переключением выигрывает 65 раз.

Решение проблем с помощью программирования

Симулятор Монти Холла — отличная демонстрация того, как можно использовать программирование для решения реальных задач. Вы можете разрабатывать различные алгоритмы и обучать модели для выполнения определенных задач, таких как сортировка массива или повышение эффективности системы для оптимального производства.

Разные языки программирования предлагают разные возможности и функции, облегчающие программирование. Используя Python, вы можете создавать модели, которые могут предсказывать будущие значения набора данных с более высокой точностью. Кроме того, вы можете автоматизировать повторяющиеся операции, уменьшить скучную работу и повысить скорость и точность.