2 TP – Des maux de têtes avec des mots de deux lettres
Dans ce TP, on utilise la fonction Python 𝑐ℎ𝑜𝑖𝑐𝑒 disponible dans le module 𝑟𝑎𝑛𝑑𝑜𝑚 (qui contient une bibliothèque de fonctions Python déjà écrites pour faire des simulations) dont 𝑟𝑎𝑛𝑑𝑖𝑛𝑡 et 𝑐ℎ𝑜𝑖𝑐𝑒.
Exemples : 𝑐ℎ𝑜𝑖𝑐𝑒(["toto", "titi", "tata"]) simule un tirage parmi « titi », « toto », « tata » avec la même probabilité 𝑟𝑎𝑛𝑑𝑖𝑛𝑡(1, 4) simule un lancer de dé tétraédrique dont les quatre faces sont: « 1 », « 2 », « 3 », « 4 » Tirages avec remise
Dans un sac, on dépose six jetons de Scrabble marqués respectivement : « a », « a », « a », « b », « b », « c ».
On tire au hasard et avec remise deux lettres. On obtient ainsi un mot de deux lettres.
1. Faire la liste des mots possibles.
2. Construire un arbre décrivant l’univers de cette expérience aléatoire. Modéliser par une loi de probabilité.
3. Soit 𝐴: « on a tiré au moins une lettre 𝑎 ». Calculer 𝑃(𝐴)
4. Compléter la fonction Python nommée 𝑎𝑣𝑒𝑐_𝑟𝑒𝑚𝑖𝑠𝑒. Elle simule 𝑛 fois l’expérience aléatoire puis renvoie la fréquence des mots ayant au moins une lettre « 𝑎 ».
from … import * def avec_remise(…):
…
for k in range(0, …):
lettre1 = choice(["a", "a", "a", "b", "b", "c"]) lettre2 = choice(["a", "a", "a", "b", "b", "c"]) if lettre1 == "a" … lettre2 == "a" :
compte = … return(… / n)
print( avec_remise(1000) )
Tirages sans remise
Dans un sac, on dépose six lettres de Scrabble : « a », « a », « a », « b », « b », « c ».
On tire au hasard et sans remise deux lettres. Après chaque tirage, on note la lettre obtenue.
1. Construire un arbre décrivant l’univers de cette expérience aléatoire. Modéliser par une loi de probabilité.
2. Soit 𝐴 : « on a tiré au moins une lettre 𝑎 ». Calculer 𝑃(𝐴)
3. Ecrire une fonction Python, nommée 𝑠𝑎𝑛𝑠_𝑟𝑒𝑚𝑖𝑠𝑒, qui simule 𝑛 fois l’expérience aléatoire puis renvoie la fréquence des mots ayant au moins fois la lettre « a ».
Temps d’attente avec remise
Dans un sac, on dépose six lettres de Scrabble : « a », « a », « a », « b », « b », « c ».
On tire au hasard une lettre :
Si on obtient le « c », le jeu s’arrête
Si on obtient un « a » ou un « b », on remet la lettre puis on recommence le tirage. Et ainsi de suite jusqu’à obtenir le « c ».
On note le nombre de tirages effectués jusqu’à obtenir le « c ».
1. Ecrire une fonction Python, nommée 𝑎𝑡𝑡𝑒𝑛𝑡𝑒, qui simule une seule expérience aléatoire et renvoie le nombre de tirages effectués pour obtenir le «c ».
2. Ecrire, en appelant la fonction attente_moyenne, une fonction Python qui affiche le nombre moyen de tirages pour obtenir le « c » dans un échantillon de taille 𝑛.
Temps d’attente sans remise
Dans un sac, on dépose quatre lettres de Scrabble : « a », « a », « b », « c ».
On tire au hasard une lettre :
Si on obtient le « c », le jeu s’arrête
Si on obtient un « a » ou un « b », on recommence le tirage sans remettre la lettre. Et ainsi de suite jusqu’à obtenir le « c ».
On note le nombre de tirages effectués jusqu’à obtenir le «c ».
Construire un arbre décrivant l’univers de cette expérience aléatoire. Modéliser par une loi de probabilité.
Pour se corriger
Tirages avec remise
Question 1
Une première réponse correcte : celle d’Ursule
« Pour distinguer les trois jetons marqués « a » et les deux marqués « b », j’écris au feutre un numéro à côté de chaque lettre. Les jetons sont maintenant marqués : 𝑎1, 𝑎2, 𝑎3, 𝑏1, 𝑏2, 𝑐.
Cela ne chance rien au résultat du tirage au hasard. »
Mot obtenu
𝒂𝒂 𝒂𝒂 𝒂𝒂 𝒂𝒃 𝒂𝒃 𝒂𝒄 𝒂𝒂 𝒂𝒂 𝒂𝒂 𝒂𝒃 𝒂𝒃 𝒂𝒄 𝒂𝒂 𝒂𝒂 𝒂𝒂 𝒂𝒃 𝒂𝒃 𝒂𝒄 𝒃𝒂 𝒃𝒂 𝒃𝒂 𝒃𝒃 𝒃𝒃 𝒃𝒄 𝒃𝒂 𝒃𝒂 𝒃𝒂 𝒃𝒃 𝒃𝒃 𝒃𝒃 𝒄𝒂 𝒄𝒂 𝒄𝒂 𝑐𝑏 𝑐𝑏 𝑐𝑐 Chacun des 36 chemins ont la même probabilité 361.
Mots aa ab ac ba bb bc ca cb cc
Probabilité 9 36=1
4 6 36=1
6 3 36= 3
12 6 36= 1
12 4 36=1
9 2 36= 1
18 3 36= 1
12 2 36= 1
12
1 36
Une deuxième réponse correcte : celle de Totor
« J’utilise un arbre de dénombrement. Sur chaque branche, je porte le nombre de jetons différents donnant la lettre marquée sur le nœud d’arrivée. »
Mot obtenu
Dénombrement des possibilités 𝑎𝑎
𝑎𝑏
𝑎𝑐 𝑏𝑎 𝒃𝒃 𝒃𝒄 𝑐𝑎 𝒄𝒃 𝒄𝒄 Total
3 × 3 = 9 3 × 2 = 6 3 × 1 = 3 2 × 3 = 6 2 × 2 = 4 2 × 1 = 2 1 × 3 = 3 1 × 2 = 2 1 × 1 = 1 9 + 6 + ⋯ + 1 = 36
Remarque : quand les conditions du tirage restent identiques, on ne prendra pas la précaution de bien les identifier. Voici ce qu’on écrira :
Loi de probabilité
Comme les jetons faces cachées (attention ce n’est le cas ni des lettres, ni des mots) sont indiscernables, on choisit d’attribuer à chaque chemin (de la racine à une feuille) la même probabilité 361.
Mots aa ab ac ba bb bc ca cb cc
Probabilité 9 36=1
4 6 36=1
6 3 36= 3
12 6 36= 1
12 4 36=1
9 2 36= 1
18 3 36= 1
12 2 36= 1
12
1 36
3 « a » 2 « b » 1 « c »
3 « a » 2 « b » 1 « c »
3 « a » 2 « b » 1 « c »
3 « a » 2 « b » 1 « c »
Une troisième réponse : celle d’Iconoclaste
« J’utilise un arbre de probabilités. Sur chaque branche, je porte la probabilité, lors du tirage concerné (première ou deuxième lettre), d’obtenir la lettre marquée sur le nœud d’arrivée. »
Mot obtenu Probabilités 𝑎𝑎
𝑎𝑏
𝑎𝑐
𝑏𝑎
𝒃𝒃
𝒃𝒄
𝑐𝑎
𝒄𝒃
𝒄𝒄
3 36× 3
36= 9
36= 0,25 3
36× 2 36= 6
36≈ 0,167 3
6×1 6= 3
36≈ 0,083 2
6×3 6= 6
36≈ 0,167 2
6×2 6= 4
36≈ 0,111 2
6×1 6= 2
36≈ 0,056 1
6×3 6= 3
36≈ 0,083 1
6×2 6= 2
36≈ 0,056
1
6×16=361 ≈ 0,028
La loi de probabilité est encadrée ci-dessus.
Question 2 𝐴 = {𝑎𝑎 ; 𝑎𝑏 ; 𝑎𝑐 ; 𝑏𝑎 ; 𝑐𝑎 }
La probabilité d’un événement est la somme des probabilités des issues qui le réalisent.
𝑃(𝐴) =369 +366 +363 +366 +363 =2736=34= 0,75
Question 3
from random import *
def avec_remise(n):
compte = 0
for k in range(0, n):
lettre1 = choice(["a", "a", "a", "b", "b", "c"]) lettre2 = choice(["a", "a", "a", "b", "b", "c"]) if lettre1 == "a" or lettre2 == "a" :
compte = compte + 1 return compte/n
print( avec_remise(1000) )
On doit importer le module random pour utiliser la fonction choice
compte contient le nombre de 𝑎 obtenu. Cette variable doit être initialisée Le nombre de simulations n’est connu qu’à l’appel de la fonction
𝑘 prendra les valeurs 0, 1, 2, 3, …, 𝑛 − 1. On a bien 𝑛 simulations
En Python, le « ou inclusif » se note « or » Chaque fois que l’on obtient « a », on ajoute 1 au compteur La fréquence de la lettre a parmi toutes les simulations est 𝑐𝑜𝑚𝑝𝑡𝑒
𝑛
3 « a » 2 « b » 1 « c »
3 « a » 2 « b » 1 « c » 3 « a » 2 « b » 1 « c » 3 « a » 2 « b » 1 « c »
Tirages sans remise
Question 1
Une première réponse correcte : celle de Totor
« J’utilise un arbre de dénombrement. Sur chaque branche, je porte le nombre de jetons différents donnant la lettre marquée sur le nœud d’arrivée. »
Mots 𝑎𝑎 𝑎𝑏 𝑎𝑐 𝑏𝑎 𝑏𝑏 𝑏𝑐 𝑐𝑎 𝑐𝑏
Nombre de chemins 3 × 2 = 6 3 × 2 = 6 3 × 1 = 3 2 × 3 = 6 2 × 1 = 2 2 × 1 = 2 1 × 3 = 3
1 × 2 = 2 Total : 30
Probabilités 6
30=1 5 6 30=1
5 3 30= 1
10 6 30=1
5 2 30= 1
15 2 30= 1
15 3 30= 1
10 2 30= 1
15
Une seconde réponse correcte : celle d’Iconoclaste
« J’utilise un arbre de probabilité. Sur chaque branche, je porte le nombre de jetons différents donnant la lettre marquée sur le nœud d’arrivée. »
Mots 𝒂𝒂
𝒂𝒃
𝒂𝒄
𝒃𝒂
𝑏𝑏
𝑏𝑐
𝒄𝒂
𝑐𝑏
Probabilités
3
6×25=306
3 6×2
5= 6
30
3 6×1
5= 3
30
2 6×3
5= 6
30
2 6×1
5= 2
30
2 6×1
5= 2
30
1 6×3
5= 3
30
1
6×25=302
3 « a » 2 « b » 1 « c »
2 « a » 2 « b » 1 « c »
3 « a » 1 « b » 1 « c »
3 « a » 2 « b » 3 « a »
2 « b » 1 « c »
2 « a » 2 « b » 1 « c »
3 « a » 1 « b » 1 « c »
3 « a » 2 « b »
from random import *
def attente_sans_remise():
compte = 0
while ["a", "a", "b", "c"] != "c" : compte = compte + 1
return compte Question 2 𝐴 = {𝑎𝑎 ; 𝑎𝑏 ; 𝑎𝑐 ; 𝑏𝑎 ; 𝑐𝑎 }
La probabilité d’un événement est la somme des probabilités des issues qui le réalisent.
𝑃(𝐴) =306 +306 +303 +306 +303 =2430= 0,8
Question 3
from random import * def sans_remise(n):
compte = 0
for k in range(0, n):
lettre1 = choice(["a", "a", "a", "b", "b", "c"]) if lettre1 == "a":
lettre2 = choice(["a", "a", "b", "b", "c"]) if lettre1 == "b":
lettre2 = choice(["a", "a", "a", "b", "c"]) if lettre1 == "c":
lettre2 = choice(["a", "a", "a", "b", "b"]) if lettre1 == "a" or lettre2 == "a" :
compte = compte + 1 return compte / n
print( sans_remise(1000) )
Ci-dessous une autre version plus concise.
Temps d’attente avec remise
Question 1
from random import *
def attente():
# On effectue le premier tirage
lettre = choice(["a", "a", "a", "b", "b", "c"]) compte = 1
while lettre != "c" :
# tant que la lettre n'est pas "c", on retire lettre = choice(["a", "a", "a", "b", "b", "c"]) compte = compte + 1
# On renvoie le nombre de tirages faits pour obtenir "c"
return compte
Une version plus concise def attente():
compte = 1
while choice(["a", "a", "a", "b", "b", "c"]) != "c" : compte = compte + 1
return compte
Question 2 A la suite du code précédent, on tape : def attente_moyenne(n):
total = 0
for k in range(0, n):
total = total + attente() print(total / n)
# Pour lancer appeler la fonction sur un échantillon de taille 1000 attente_moyenne(1000)
Temps d’attente sans remise
Solution correcte de Totor
« J’utilise un arbre de dénombrement pour dresser la liste de tous les tirages sans remise possibles jusqu’à ce qu’il n’y ait plus de lettre disponible. Sur chaque branche, je porte le nombre de jetons restants (il n’y a pas de remise) donnant la lettre marquée sur le nœud d’arrivée.
Après je relève le nombre de tirages nécessaires pour obtenir le « c ». Cela revient à tronquer.»
Nombre de tirages
4 3 4 3 1 1 4 3 1 1 1 1
Possibilités
2 2 2 2 2 2 2 2 2 2 2 2 Total : 24
Loi de probabilité
Les chemins complets (non tronqués) ont la même probabilité puisque choisir un chemin complet au hasard revient à tirer un mot de quatre lettre parmi les 24 possibles.
Toutes les possibilités ont les mêmes chances de se produire : 241
Nombre de tirages 1 2 3 4
Probabilités 6
24= 0,25 6
24= 0,25 6
24= 0,25 6
24= 0,25
Solution correcte d’Iconoclaste
« J’utilise un arbre de probabilité. Sur chaque branche, je porte le nombre de jetons différents donnant la lettre marquée sur le nœud d’arrivée. »
Nombre de tirages
4
3
4
3
2
4
3
2
1
Probabilités
2 4×1
3×1
2× 1 = 2 24
2 4×1
3×1 2= 2
24
2 4×1
3×1
2× 1 = 2 24
2 4×1
3×1 2= 2
24
2 4×1
3= 2 12= 4
24
1 4×2
3×1
2× 1 = 2 24
1 4×2
3×1 2= 2
24
1 4×1
3= 1 12= 2
24
1 4= 6
24
Loi de probabilité
Nombre de tirages 1 2 3 4
Probabilités 6
24= 0,25 2 24+ 4
24= 6
24= 0,25 2 24+ 2
24+ 2
24= 0,25 2 24+ 2
24+ 2
24= 0,25
2 « a » 1 « b » 1 « c »
1 « a » 1 « b » 1 « c »
2 « a » 1 « c »
1 « a » 1 « c »
1 « c » 1 « c »
1 « c »
1 « a » 1 « c »
1 « b » 1 « c »
Compléments (piste noire)
Un graphe possible pour représenter les tirages sans remise parmi « a », « a », « b », « c » jusqu’à obtenir « c »
Voici un graphe possible pour décrire la situation : ce n’est pas un arbre !
Il permet de calculer la probabilité d’obtenir le « c » au 9ième tirage : 34× (3
4)7×1
4
On parcourt : 1 fois la flèche droite marquée 3
4
7 fois la boucle marquée 3
4
1 fois la flèche droite marquée 14