Lectores como tú ayudan a apoyar a MUO. Cuando realiza una compra utilizando enlaces en nuestro sitio, podemos ganar una comisión de afiliado. Leer más.

Si eres un niño de los 70, es posible que hayas crecido viendo el popular programa de juegos Let's Make a Deal. Desde entonces, la gente discute vívidamente el rompecabezas de Monty Hall y se divierte replicándolo. El suspenso alucinante y el drama creado cuando el concursante elige una de las tres puertas es divertido de ver cada vez.

Usando matemáticas y un poco de programación, construirá un simulador de Monty Hall usando Python. Con esto, podrás decidir de una vez por todas que cambiar las puertas aumenta tus posibilidades de ganar.

¿Qué es el problema de Monty Hall?

El problema de MontyHall es un acertijo que lleva el nombre del presentador del programa de juegos, Monty Hall. Hay tres puertas, solo una de las cuales contiene un premio deseado. Una vez que eliges una puerta, Monty, que sabe lo que hay detrás de ellos, abre otra puerta y revela una cabra. Ahora tiene la opción de seguir con su decisión original o cambiar a la otra puerta.

instagram viewer

Debido a su naturaleza sorprendente e impredecible, el rompecabezas de Monty Hall es muy popular. Aunque se trata de probabilidades, la solución desafía la intuición. Sirve como una excelente demostración de cuán confusos pueden ser los cálculos de probabilidad. El acertijo nos enseña cómo ignorar las impresiones de sucesos aparentemente aleatorios y, en cambio, centrarnos en el razonamiento y los hechos.

Los módulos Random y Tkinter

Para construir una simulación de Monty Hall en Python, comience con los módulos Random y Tkinter.

Hay varias funciones para producir números aleatorios en el módulo Random. Puede usar estos algoritmos para generar secuencias aleatorias, movimientos de juego y números enteros pseudoaleatorios. Se utiliza con frecuencia en juegos como cricket de mano, o una prueba de mecanografía simple, así como para simular tiradas de dados y barajar listas.

Tkinter es la biblioteca GUI predeterminada para Python. Utilizándolo, puede crear fantásticas aplicaciones GUI. Puede crear una aplicación de lista de tareas pendientes, un editor de texto o una calculadora simple. Puede poner en práctica sus conocimientos y perfeccionar sus habilidades de programación con Python y Tkinter para crear aplicaciones de escritorio básicas.

Abra una terminal y ejecute el siguiente comando para agregar Tkinter a su sistema:

pip instalar tkinter

Cómo construir un simulador de Monty Hall usando Python

Puedes encontrar el código fuente del Monty Hall Simulator en este repositorio GitHub.

Importe los módulos aleatorios y Tkinter. La función StringVar facilita el control del valor de un widget como una etiqueta o una entrada. Puede usar una etiqueta para mostrar texto en la pantalla y una entrada para obtener la entrada del usuario.

Inicialice la instancia de Tkinter y muestre la ventana raíz. Establezca las dimensiones de la ventana en 600 píxeles de ancho y 200 píxeles de alto usando el geometría() método. Establezca un título de ventana apropiado y prohíba su cambio de tamaño.

importar aleatorio
de tkinter importar StringVar, Etiqueta, Tk, Entrada

ventana = Tk()
ventana.geometría("600x200")
ventana.titulo("Simulación de Monty Hall")
ventana.redimensionable(0, 0)

A continuación, configure dos pares de widgets y variables para almacenar los resultados de la simulación. Su aplicación le pedirá una serie de ejecuciones para completar. Durante cada ejecución, simulará el juego y registrará el resultado en cada caso: si el jugador decide cambiar o mantener la misma elección.

Usando StringVar(), establezca los valores iniciales de la misma opción y cambie la opción a 0. Defina un widget de entrada y establezca su tamaño de fuente en 5. Declare dos etiquetas para mostrar la misma y la opción cambiada y colóquela. Declare dos etiquetas más que mostrarán el valor de las variables que definió anteriormente. Finalmente, coloque el widget de Entrada debajo de estas cuatro etiquetas.

misma_opción = StringVar()
elección_conmutada = StringVar()
misma_opción.set(0)
elección_cambiada.set(0)
no_sample = Entrada (fuente=5)

Etiqueta (texto="Misma elección").lugar (x=230, y=58)
Etiqueta (texto="Elección cambiada").lugar (x=230, y=90)
Etiqueta (variable de texto=misma_elección, fuente=(50)).lugar (x=350, y=58)
Etiqueta (variable de texto = elección_cambiada, fuente = (50)).lugar (x=350, y=90)
no_muestra.lugar (x=200, y=120)

Definir una función, simular. Inicialice las variables de resultado y obtenga el valor de muestra ingresado por el usuario. Declare una lista que contenga los elementos que revelarán las puertas.

Dentro de cada ejecución, haga una lista duplicada de las puertas originales y mézclela en orden aleatorio. Elige una puerta al azar y quítala; esto simula la elección del jugador. Luego simule la revelación de Monty: si la primera puerta no contiene el premio, ábrala, de lo contrario, abra la segunda puerta. Elimine esa opción y deje la puerta restante como opción para cambiar.

definitivamentesimular(evento):
mismo_elección_resultado = 0
resultado_elegido_cambiado = 0
muestras = int (no_sample.get())
puertas = ["oro", "cabra", "cabra"]

para _ en rango (muestras):
puertas_simuladas = puertas.copiar()
random.shuffle (puertas_simuladas)
first_choice = random.choice (simulated_doors)
puertas_simuladas.eliminar (primera_elección)
puerta_abierta = puertas_simuladas[0] si puertas_simuladas[0] != "oro"demás puertas_simuladas[1]
puertas_simuladas.remove (puerta_abierta)
segunda_opción_conmutada = puertas_simuladas[0]

Si la primera opción contiene el premio deseado, incremente el resultado de la misma opción en uno y refleje en la pantalla. De lo contrario, realice la misma operación para la opción conmutada.

si primera_elección == "oro":
mismo_elección_resultado += 1
misma_elección.set (misma_elección_resultado)
elif cambia_segunda_elección == "oro":
resultado_elegido_cambiado += 1
elección_conmutada.establecer (resultado_elección_conmutada)

Un paso importante es vincular la tecla Intro con un evento en la ventana de Tkinter. Si lo hace, se asegurará de que cuando el jugador presione Ingresar, se ejecutará una función particular. Para lograr esto, pase el string y la función de simulación como parámetros para el unir() función.

El bucle principal() La función le dice a Python que ejecute el ciclo de eventos de Tkinter y escuche los eventos (como presionar un botón) hasta que cierre la ventana.

no_sample.bind("", simular)
ventana.mainloop()

Póngalo todo junto y ejecute su programa para simular el rompecabezas en acción.

Salida del simulador de Monty Hall usando Python

Al ejecutar el programa, verá una ventana simple con las etiquetas de opción Igual y Cambiado. Ingrese un número de muestra en el campo en la parte inferior para ver los resultados simulados. En esta muestra de 3 ejecuciones, el programa muestra que gana una vez con la misma opción y dos veces con un interruptor.

Estos resultados son aleatorios, pero puede ejecutar la simulación con un tamaño de muestra mayor para una mayor precisión. En el siguiente tamaño de muestra de 100, la opción cambiada gana 65 veces.

Resolviendo Problemas Usando Programación

El Simulador Monty Hall es una excelente demostración de cómo puede usar la programación para resolver problemas de la vida real. Puede desarrollar varios algoritmos y entrenar modelos para llevar a cabo tareas particulares, como clasificar una matriz o mejorar la eficacia de un sistema para una producción óptima.

Diferentes lenguajes de programación ofrecen diferentes capacidades y funciones para facilitar la programación. Con Python, puede crear modelos que pueden predecir los valores futuros de un conjunto de datos con mayor precisión. Además, puede automatizar operaciones repetitivas, disminuir el trabajo aburrido y mejorar la velocidad y la precisión.