Python au lycée (4) : Les fonctions Exercices

Python : Simulation de lancers de dés

Durée estimée
15 minutes
Difficulté
Votre progression

Créez un compte gratuit pour suivre votre avancement et reprendre où vous avez laissé.

Créer un compte

Objectifs travaillés

On souhaite simuler le lancer d'un dé équilibré à six faces à l'aide de Python.
Le module random fournit la fonction randint(a, b) qui renvoie un entier aléatoire compris (au sens large) entre $ a $ et $ b $.

  1. Écrire une fonction lancer(), sans argument, qui simule le lancer d'un dé à six faces.

    1. Tester la fonction en l'exécutant plusieurs fois dans la console.
  2. Écrire une fonction somme_deux_des() qui simule le lancer de deux dés et renvoie la somme des deux faces obtenues. Quelles sont les valeurs possibles renvoyées par cette fonction ?
  3. Écrire une fonction liste_lancers(n) qui renvoie la liste des résultats de $ n $ lancers successifs d'un dé.

    1. Indication : on pourra partir d'une liste vide L = [] et y ajouter chaque nouveau résultat avec L.append(...).
  4. En utilisant la fonction précédente, écrire un programme qui simule $ 1~000 $ lancers d'un dé et calcule la moyenne des résultats. Comparer cette moyenne avec l'espérance théorique $ \dfrac{1+2+3+4+5+6}{6} = 3{,}5 $.

Corrigé

  1. On importe la fonction randint puis on l'utilise avec les bornes $ 1 $ et $ 6 $ :

    from random import randint
    
    def lancer():
        return randint(1, 6)

    L'appel lancer() renvoie un entier aléatoire parmi $ 1, 2, 3, 4, 5, 6 $.

  2. On appelle deux fois la fonction randint et on additionne les résultats :

    def somme_deux_des():
        return randint(1, 6) + randint(1, 6)

    La plus petite somme possible est $ 1 + 1 = 2 $, la plus grande est $ 6 + 6 = 12 $. La fonction peut donc renvoyer tous les entiers de $ 2 $ à $ 12 $.

  3. On utilise une boucle for pour ajouter $ n $ résultats à une liste initialement vide :

    def liste_lancers(n):
        L = []
        for i in range(n):
            L.append(randint(1, 6))
        return L

    Par exemple, liste_lancers(5) peut renvoyer [3, 1, 6, 4, 2] (le résultat change à chaque exécution car il est aléatoire).

  4. On calcule la moyenne avec sum et len :

    L = liste_lancers(1000)
    moyenne = sum(L) / len(L)
    print(moyenne)

    On obtient une valeur proche de $ 3{,}5 $, par exemple $ 3{,}487 $ ou $ 3{,}521 $. Cette moyenne change à chaque exécution mais reste proche de l'espérance théorique : c'est une illustration de la loi des grands nombres.

Pour réviser : Importer et utiliser un module (math, random)