Adloun

Le problème du chevalier de Méré

Exercice de TD · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 6 — Listes et simulations aléatoires · Le module random et les simulations

Énoncé

Au XVII\textsuperscript{e} siècle, on pensait que ces deux jeux étaient également favorables : obtenir au moins un en lançant un dé fois, ou obtenir au moins un double en lançant deux dés fois.

  1. Écrire une fonction jeu_A(N) estimant la probabilité du premier événement sur N parties.
  2. Écrire jeu_B(N) pour le second.
  3. Comparer pour et conclure.

Corrigé

1. et 2.

import random

def jeu_A(N):
    succes = 0
    for partie in range(N):
        gagne = False
        for lancer in range(4):
            if random.randint(1, 6) == 6:
                gagne = True
        if gagne:
            succes = succes + 1
    return succes / N

def jeu_B(N):
    succes = 0
    for partie in range(N):
        gagne = False
        for lancer in range(24):
            if random.randint(1, 6) == 6 and random.randint(1, 6) == 6:
                gagne = True
        if gagne:
            succes = succes + 1
    return succes / N

print(jeu_A(100000))   # environ 0.518
print(jeu_B(100000))   # environ 0.491

3. Les deux jeux ne sont pas équivalents : le premier est légèrement favorable, le second légèrement défavorable. L'écart, de l'ordre de , est petit mais bien réel — et c'est en perdant de l'argent que le chevalier de Méré s'en aperçut, avant de soumettre le problème à Pascal.

Les valeurs exactes confirment la simulation : et .

Deux remarques de programmation. La variable gagne doit être remise à False à chaque partie ; la déclarer avant la boucle externe rendrait toutes les parties gagnantes dès la première réussite. Et n'est pas un luxe : avec , la fluctuation dépasse l'écart que l'on cherche à mettre en évidence, et l'on ne peut rien conclure.

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.