Écrire une fonction Python qui simule le tirage successif de deux…
Exercice d'entraînement · niveau 3 (difficile) · mathématiques (première), chapitre 10 — Probabilités conditionnelles et indépendance · Indépendance, répétitions et simulation
Énoncé
Écrire une fonction Python qui simule le tirage successif de deux boules sans remise dans une urne contenant boules rouges et boules noires, puis une fonction qui estime, sur répétitions, la probabilité d'obtenir deux boules de la même couleur. Comparer à la valeur exacte trouvée plus haut. (Représenter l'urne par une liste de huit éléments, et retirer la boule tirée de cette liste avant le second tirage.)
Corrigé
Le principe. On représente l'urne par une liste de huit éléments. Le premier tirage retire effectivement la boule de la liste (pop), ce qui traduit l'absence de remise ; le second tirage se fait alors parmi les sept boules restantes.
from random import randrange
def tirage_sans_remise():
# Renvoie le couple des deux couleurs tirees
urne = ['R'] * 5 + ['N'] * 3
b1 = urne.pop(randrange(len(urne))) # la boule tiree quitte l'urne
b2 = urne[randrange(len(urne))] # second tirage parmi les 7 restantes
return (b1, b2)
def frequence_meme_couleur(N):
# Frequence des tirages bicolores identiques sur N repetitions
favorables = 0
for k in range(N):
b1, b2 = tirage_sans_remise()
if b1 == b2:
favorables = favorables + 1
return favorables / N
print(frequence_meme_couleur(100000)) # 0.464
Comparaison. La valeur exacte est . Sur répétitions, la fréquence observée tourne autour de – : les deux nombres coïncident à près, et l'écart se resserre quand grandit (loi des grands nombres).
Le point délicat du code : si l'on écrivait urne[randrange(8)] deux fois de suite sans pop, on simulerait un tirage avec remise — dont la probabilité exacte serait , sensiblement différente. La simulation ne pardonne pas l'approximation du modèle.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.