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/11awion019 ‘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/11autoro19 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/11aytoro19 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/11auiorzo19 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