You are on page 1of 11
auiorzo19 Découvrez le probléme de Monty Hall- Découvrez las ibraries Python pour la Data Sciences - OpenClassrooms == >PENCLASSROOMS Q Mis 8 jour le 2/02/2018 Découvrez le probleme de Monty Hall oes Cette partie cu cours corcerne plutét les Data Scientists. Si vous étes Data Analyst, pessez cirectement a ce chapitre : Plongez en détail dans Ia librairie NumPy. Dars ce chapitre, nous ellons nous rappeler les notions ce base de le programmation en Python. Et plutét que ce faire une liste ce tout ce que Nous avons oescin de maitriser, nous allons simuler uN probleme de probabilités. hitpsdlopenctassroams.comlcourses/4452741-decouvrez-ls-libraiiespython-pouria-data-scionce/4740997-dacouvrezle-probleme-de-monly..._ 1/11 awion019 ‘Découvrez lo problime de Monty Hall- Découvrez ls bras Python pour a Data Science - OpenClassroome Le problérre de Morty Hall est connu pour sa sclution cortre-intuitive, méme ure fois qu'elle est expliquée, La prerriare fois que j'ai entendu parler de ce prosléme, rron incréculité m’a emené & simuler les conditiors du jeu dens un programme pour me convaincre du bien-fondé ce la solution, Avjourd'hui, c'est a votre tour. Le probléme de Monty Hall v Llexposé cu probleme est clutdt simple. Imaginez un jeu télévisé ou il y é trois portes sur le olateau de jeu. Seule une de ces portes cache Un trésor. II n'a rien cerriére les ceux aLtres portes, Rien ne permet de savoir quelle porte cache le trésor. La tache du joueur consiste & choisir oarrri les trois portes celle quill veut ouvrir. Il aure drcit au trésor sil choisit la corne porte, et rien sinon. Pour faire son choix, il n'e aucune information. II doit done simplement s'en remettre au hasarc. Jusquici, le probleme n'a rien de remerouable, Mais il y a Un twist! Une fois cue le joueur é feit son choix, mais avant d'ouvrir la corte, le présentateur élimine, oarmi les deux portes non choisies, une Porte qui ne contient pas de trésor, Si les deux portes restentes ne contiennent rien, le présentateur élimine simclement une clentre elles au haserd, Le joueur doit alors feire ur nouveau choix. II peut soit choisir diouvrir la premiére porte evil avait choisie, soit charger pour la porte ron éliminée par le orésentateur. La question est, ou'a+til irtérét a faire ? Réfiéchissez-y. Vous n'avez en principe pas besoin de connaissances poussées en probabilités pour résoudre ce probléme, Que feriez-vous ? Simulation v Génération d'une seule partie de jeu Allons-y. Nous allors commencer par écrire une fanctian qui génére une partie cu jeu, Cette fonctior choisit eléatoirenent une porte parmi les trois pour y cacher le trésor. Elle choisit ensuite aléstoirerrent le cremier choix du participant, et élimine ure des ceux portes restantes. Ensuite, ure nouvelle corte est choisie selor la stretégie adootée car le joueur * Charger ce porte * Ne pas changer de porte Enfin, le gain du participant est calculé. Tout c’edord, préparons notre envirornement de trevail dans ur noteboo! oythor 1 # Pour afficher les graphiques dans 1a continuité du code, 2 # et non pas dans une fenétre & part: 3 Knatplotlib inline 4 5 # Pour utiliser a fonction randint, qui génére des nombres 6 # entiers de facon aléatoire 7 from random import randint, seed hitpsllopenctassroams.comlcourses/4452741-decouvrez-ls-lbraiiespython-pouria-data-scionce/4740897-dacouvrezle-probleme-de-monly..._ 2/11 autoro19 Découvrez le probléme de Monty Hall- Découvrez las ibraries Python pour la Data Sciences - OpenClassrooms 8 9 1e u 2 a ery a5 # Un Enum est une structure de données qui consiste en un # ensemble d’élénents nonaés. Une variable de ce type peut # avoir conme valeur un de ces éléments fron enun import Enun # Pour pouvoir afficher des graphiques: import matplotlib.pyplot as Les stratégies du joueur Maintenant nous allors définir les stretégies possibles pour le joueur. II peut soit choisir de changer, Soit de garder son choix initial. Pour cela, nous tirons profit de le classe Enum . Cette approche nous permet clevoir ces noms comeréhensibles cour nos stratécies, Une autre approche corsisterit a césigner cheque stratégie oer un ertier, par exernple O pour changer ce porte, et] pour garder le choix initial. Mais cette approche a des défeuts * elle ne permet pas ce contraincre le choix au morrent oU aueleu'un d * lecode est moins lisi tre utilisera notre fonction. Un utilisateur final pourra eppeler rctre fonction de simulation en utilisent comme stretégie un entier non pris en charge, comrre 2, et ne saure pas cue cela cosera probleme a moins que nous implémentiors des vérification le. II faut se rappeler ce que cheque nombre signifie pour comprencre le progremme. sythor # Tei nous déFinissons une sous-classe de Enum, qui contiendra # les stratégies possibles. class Strategie (Enun) concer GAROER Ce coce fait appel ¢ des rotiors ce programmation orientée objet, rotarrment eux notions de classe et d'héritage Vous re devriez ceoendant pas avoir de mal 4 corrprendre ce chapitre si vous ne meitrisez pas ces concects. Erfin, nous pouvons défirir notre fonction. Nous allons écrire une fonction trés simple. Elle ne simule qu'une seule partie du jeu pour ure stretégie donnée. Rappelez-vous comment on définit ure fonction en Python. Le commentaire en plusieurs lignes apres la déclaretion du rom de la forction (lignes 6 8 18) est ur aocstring. Par convention, il est utilisé par olusieurs outils cour générer une cocumentation, Cest une trés bonne idée de toujours corrmenter vos forctions. Un bon commentaire doit expliquer nor seulement ce que la fonction fait, meis aussi courousi. Notez la séparetion entre le premiere ligne cu cocstring, qui contient une descriction eorégée, et le reste, qui sert 4 cécrire plus précisément le fonction. Dens la liste ces hitpsJlopenctassroams. comlcourses/4452741-decouvrez-ls-libraiispyhon-pouria-data-scionce/4740997-decouvrezle-probleme-de-monly..._ 3/11 aytoro19 Découvrez le probléme de Monty Hall- Découvrez las ibraries Python pour la Data Scienca - OpenClassrooms arguments, on peut définir le type attencu entre carenthéses, Pour plus d'exemples Gitilisation ces cocstring, je vous invite 8 consulter cette page. aythor # Utilise L'honloge systéme pour initialiser le génénateur de # nombres pseudo-aléatoires. seed() def play_gane(strategie) Sinule une partie du jeu Monty Hall. Cette fonction simule le choix de 1a porte par le participant, 1'6Linination d'une mauvaise porte par le présentateur, et le choix final. Elle ne retourne que le résultat de la partie, parce que nous n'aurons besoin que du résultat pour effectuer nos calculs. acgs: strategie (Strategie): La strategie du joueur Returns: bool: Le joueur a~ 41 gagné? portes = [@, 1, 2 ndint (0,2) 4 Choix du joueur premier_choix = randint(@,2) 4 TL nous reste deux portes portes.renove(prenien_¢ 4 Le présentateur élimine une porte Af premier_choix = portes.renove(portes[randint (®,1)]) deuxiene_choix = @ 4 Le deuxieme choix depend de 1a strategie if egie == Strategie. CHANGER deuxiene_choix = portes[@ rrategie.GARDER x = prenier_choix elif strategic deuxiene_c else raise ValueErron("Stratégie non reconnue!") return deuxiene Lefonetion randint retourne un ertier léatoire compris ertre ses deux erguments, Par exemple, randint(@,2) retourneré 0, 1, U 2. Chaque appel 8 Ia fonction entreinere le généretion c'ure nouvelle valeur. Il est donc important de seuvegerder la valeur de retour ce la fonction cers une variable si on é besoin de le réutiliser par la suite. hitpsflopenctasscooms, comifricourses/4452741-decouvrez-es-libraiis python-pour-ia-data-science/4740907-decouvreze-probleme-de-monly..._ 4/11 auiorzo19 Découvrez le probléme de Monty Hall- Découvrez las ibraries Python pour la Data Sciences - OpenClassrooms randint , ainsi que c’autres fonctions de la libreirie random , utilisent en fait un générateur oseucc-aléatoire. Les détails ce cette imelémentation ne sort zs importants pour nous. Ce quil feut savoir, clest aue ces fonctiors générert une suite de nombres aléatoires en se asant sur une veleur de base. Cette valeur de base peut étre définie cer l'utilisateur grace & lafonction sec . En utilisant cette forction avec une valeur fixe, la méme séquence sera générée d'une exécution ou programme é l'autre, Si eucur argument n'est denné seed , thorloge du syetéme est utilisée pour avoir une valeur, python 1 seed() 2 print("Premier nombre aléatoire: (}".format(randint(@,18@))) 3 print("Deuxiéne nonbre aléatoire: {}".Format(randint (@,100))) 4 5 seed(1) 6 print("Premier nonbre aléatoire: {}".format(randint(@,18@))) 7 print ("Deuxiéne nonbre aléatoire: {)".format (randint(@,1¢@)) 8 9 seed(1 10 # Les deux prochains appels vont retourner le méne résultat que les deux précédents AL print ( 12 print ( renier nonbre aléatoire: {}".format(randint(@,16@))) jeuxiene nonbre aléatoire: {}*.format(randint (@,1@8) )) Simulation de plusieurs parties Maintenant nous ellors essayer notre fonction. N'hésitez pas a lancer la ligne suivante plusieurs fois pour vous convaincre cue le résultat est aléatoire. oythor 1 play_gome (strategie.CHANGER) Bien ! Nous pouvons simuler une partie du jeu. Mais pour 9ouvoir nous convaincre de la réponse & ''nigme, rous avorss besoin de jouer beauccue ce fois, noter les résultats, et ensuite en tirer des corclusions. Heureuserent, nous avons un ordinateur sous lé rrain. Nous allors céfinir une forction qui lancer le jeu autart ce fois que ncus le souhzitons, et retournera le résultat de chaque ertie dans ure list . Pour pouvoir exécuter des calculs sur ces résultats, nous allons aussi les stocker non ous comme des variables cooléennes (Vrei ou Faux) meis en terme cu gain cu joueur (sil a gagné, 0 sill a perdu). oythor def play(strategie, nb_tours) “Sinule une suite de tours du jeu. Cette fonction renvole les résultats de plusieurs parties 1 2 3 4 5 du jeu Monty Hall sous forme d'une liste de gains par le 6 joveur. 7 a aegs: hitpsJlopenctassroams. comlcourses/4452741-decouvrez-les-libraiespython-pouria-data-scionce/4740897-decauvrezle-probleme-de-monly..._5/t1

You might also like