Если вы ребенок 70-х, возможно, вы выросли на популярном игровом шоу «Давай заключим сделку». С тех пор люди оживленно обсуждают головоломку Монти Холла и с удовольствием копируют ее. Невероятное напряжение и драма, возникающие, когда участник выбирает одну из трех дверей, каждый раз интересно наблюдать.
Используя математику и немного программирования, вы собираетесь создать симулятор Монти Холла с помощью Python. Используя это, вы сможете раз и навсегда решить, что переключение дверей увеличивает ваши шансы на победу.
Что такое проблема Монти Холла?
Проблема Монти Холла — головоломка, названная в честь ведущего игрового шоу Монти Холла. Есть три двери, только одна из которых содержит желанный приз. Как только вы выбираете дверь, Монти — который знает, что за ними — открывает другую дверь, показывая козу. Теперь у вас есть возможность придерживаться своего первоначального решения или переключиться на другую дверь.
Благодаря своему удивительному и непредсказуемому характеру головоломка Монти Холл очень популярна. Хотя оно имеет дело с вероятностями, решение не поддается интуиции. Это служит отличной демонстрацией того, насколько запутанными могут быть расчеты вероятностей. Головоломка учит нас, как игнорировать впечатления от, казалось бы, случайных событий и вместо этого сосредоточиться на рассуждениях и фактах.
Модули 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, вы можете создавать модели, которые могут предсказывать будущие значения набора данных с более высокой точностью. Кроме того, вы можете автоматизировать повторяющиеся операции, уменьшить скучную работу и повысить скорость и точность.