Si vous êtes un enfant des années 70, vous avez peut-être grandi en regardant le jeu télévisé populaire Let's Make a Deal. Depuis lors, les gens discutent vivement du puzzle de Monty Hall et s'amusent à le reproduire. Le suspense et le drame époustouflants créés lorsque le candidat choisit l'une des trois portes sont amusants à regarder à chaque fois.
En utilisant les mathématiques et un peu de programmation, vous allez construire un simulateur Monty Hall en utilisant Python. Grâce à cela, vous pourrez décider une fois pour toutes que changer de porte augmente vos chances de gagner.
Quel est le problème de Monty Hall?
Le problème de Monty Hall est un casse-tête nommé d'après l'animateur du jeu télévisé, Monty Hall. Il y a trois portes, dont une seule contient un prix souhaité. Une fois que vous avez choisi une porte, Monty - qui sait ce qu'il y a derrière - ouvre une autre porte, révélant une chèvre. Vous avez maintenant la possibilité de vous en tenir à votre décision initiale ou de passer à l'autre porte.
En raison de sa nature surprenante et imprévisible, le puzzle Monty Hall est très populaire. Bien qu'il s'agisse de probabilités, la solution défie l'intuition. C'est une excellente démonstration de la confusion des calculs de probabilité. Le puzzle nous apprend à ignorer les impressions d'événements apparemment aléatoires et à se concentrer plutôt sur le raisonnement et les faits.
Les modules Random et Tkinter
Pour construire une simulation Monty Hall en Python, commencez par les modules Random et Tkinter.
Il existe plusieurs fonctions pour produire des nombres aléatoires dans le module Random. Vous pouvez utiliser ces algorithmes pour générer des séquences mélangées, des mouvements de jeu et des entiers pseudo-aléatoires. Il est fréquemment utilisé dans des jeux comme le hand cricket, ou un test de dactylographie simple, ainsi que pour simuler des lancers de dés et mélanger des listes.
Tkinter est la bibliothèque graphique par défaut pour Python. En l'utilisant, vous pouvez créer des applications graphiques fantastiques. Vous pouvez créer une application de liste de tâches, un éditeur de texte ou une simple calculatrice. Vous pouvez mettre vos connaissances en pratique et perfectionner vos compétences en programmation en utilisant Python et Tkinter pour créer des applications de bureau de base.
Ouvrez un terminal et exécutez la commande suivante pour ajouter Tkinter à votre système :
pip installer tkinter
Comment construire un simulateur Monty Hall en utilisant Python
Vous pouvez trouver le code source du simulateur Monty Hall dans ce Référentiel GitHub.
Importez les modules random et Tkinter. La fonction StringVar facilite le contrôle de la valeur d'un widget comme une étiquette ou une entrée. Vous pouvez utiliser une étiquette pour afficher du texte à l'écran et une entrée pour récupérer l'entrée de l'utilisateur.
Initialisez l'instance de Tkinter et affichez la fenêtre racine. Définissez les dimensions de la fenêtre sur 600 pixels de large et 200 pixels de haut à l'aide de la géométrie() méthode. Définissez un titre de fenêtre approprié et interdisez son redimensionnement.
importer aléatoire
depuis tkinter importer StringVar, Étiquette, Tk, Entrée
fenêtre = Tk()
window.geometry("600x200")
fenêtre.titre("Simulation Monty Hall")
window.resizable(0, 0)
Ensuite, configurez deux paires de widgets et de variables pour stocker les résultats de la simulation. Votre application demandera un certain nombre d'exécutions à effectuer. Lors de chaque run, il simulera le jeu et enregistrera le résultat dans chaque cas: si le joueur décide de changer ou de conserver le même choix.
À l'aide de StringVar(), définissez les valeurs initiales du même choix et passez le choix à 0. Définissez un widget d'entrée et définissez sa taille de police sur 5. Déclarez deux étiquettes pour afficher la même chose et le choix commuté et positionnez-le. Déclarez deux étiquettes supplémentaires qui afficheront la valeur des variables que vous avez définies précédemment. Enfin, placez le widget Entrée sous ces quatre étiquettes.
même_choix = StringVar()
switch_choice = StringVar()
meme_choix.set(0)
switch_choice.set(0)
no_sample = Entrée (font=5)
Libellé (texte="Même choix").lieu (x=230, y=58)
Libellé (texte="Choix commuté").lieu (x=230, y=90)
Libellé (textvariable=same_choice, font=(50)).lieu (x=350, y=58)
Libellé (textvariable=switched_choice, font=(50)).lieu (x=350, y=90)
no_sample.place (x=200, y=120)
Définir une fonction, simuler. Initialisez les variables de résultat et obtenez la valeur d'échantillon saisie par l'utilisateur. Déclarez une liste qui contient les éléments que les portes révéleront.
Dans chaque course, faites une liste en double des portes d'origine et mélangez-la dans un ordre aléatoire. Choisissez une porte au hasard et supprimez-la - cela simule le choix du joueur. Simulez ensuite la révélation de Monty: si la première porte ne contient pas le prix, ouvrez-la, sinon ouvrez la deuxième porte. Supprimez ce choix et laissez la porte restante comme option de basculement.
définitivementsimuler(événement):
même_choix_résultat = 0
switch_choice_result = 0
échantillons = int (no_sample.get())
portes = ["or", "chèvre", "chèvre"]
pour _ dans gamme (échantillons):
portes_simulées = portes.copie()
random.shuffle (simulated_doors)
first_choice = random.choice (simulated_doors)
portes_simulées.supprimer (premier_choix)
porte_ouverte = portes_simulées[0] si portes_simulées[0] != "or"autre portes_simulées[1]
simulated_doors.remove (opened_door)
switch_second_choice = simulated_doors[0]
Si le premier choix contient le prix souhaité, incrémentez le même résultat de choix de un et affichez-le à l'écran. Sinon, effectuez la même opération pour le choix commuté.
si premier_choix == "or":
même_choix_résultat += 1
même_choix.set (même_choix_résultat)
elif switch_second_choice == "or":
switch_choice_result += 1
switch_choice.set (switched_choice_result)
Une étape importante consiste à lier la touche Entrée à un événement dans la fenêtre Tkinter. Cela garantit que lorsque le joueur appuie sur Entrer, une fonction particulière sera exécutée. Pour y parvenir, passez le
Le boucle principale() La fonction indique à Python d'exécuter la boucle d'événements Tkinter et d'écouter les événements (tels que les pressions sur les boutons) jusqu'à ce que vous fermiez la fenêtre.
no_sample.bind("" , simuler)
fenêtre.mainloop()
Rassemblez tout et exécutez votre programme pour simuler le puzzle en action.
Sortie du simulateur Monty Hall utilisant Python
Lors de l'exécution du programme, vous verrez une fenêtre simple avec les étiquettes de choix Same et Switched. Entrez un numéro d'échantillon dans le champ en bas pour afficher les résultats simulés. Dans cet échantillon de 3 exécutions, le programme montre qu'il gagne une fois avec le même choix et deux fois avec un interrupteur.
Ces résultats sont aléatoires, mais vous pouvez exécuter la simulation avec une taille d'échantillon plus grande pour plus de précision. Dans la taille d'échantillon suivante de 100, le choix commuté gagne 65 fois.
Résolution de problèmes à l'aide de la programmation
Le simulateur Monty Hall est une excellente démonstration de la façon dont vous pouvez utiliser la programmation pour résoudre des problèmes réels. Vous pouvez développer divers algorithmes et former des modèles pour effectuer des tâches particulières telles que le tri d'un tableau ou l'amélioration de l'efficacité d'un système pour une production optimale.
Différents langages de programmation offrent différentes capacités et fonctions pour faciliter la programmation. À l'aide de Python, vous pouvez créer des modèles capables de prédire les valeurs futures d'un ensemble de données avec une plus grande précision. De plus, vous pouvez automatiser les opérations répétitives, réduire le travail ennuyeux et améliorer la vitesse et la précision.