Skip to content

Le hasard fait bien les choses

Énoncé

En programmation, il est parfois utile de générer des nombres aléatoires. Dans tous les langages de programmation, vous trouverez donc un moyen de générer des nombres aléatoires, souvent au travers de fonctions standards.

En python, c'est le module random qui fournit tout le nécessaire pour générer des nombres aléatoires.

  1. Commencez pour jouer un peu avec ce module dans l'interpréteur python. Importez d'abord le module random en saisissant la ligne :

    1
    import random
    
    puis lisez l'aide en ligne des fonctions random.randint et random.choice.

  2. Toujours dans l'interpréteur, créez un vecteur de 4 entiers aléatoires de valeur comprise entre 0 et 10, en utilisant la fonction random.randint().

  3. Utilisez ensuite la fonction random.choice pour choisir aléatoirement une valeur parmi les 4. Appelez plusieurs fois cette fonction pour constater qu'elle ne renvoie pas toujours la même valeur.

  4. Les nombres aléatoires sont générés à partir d'une constante, la graine. Par défaut, cette graine change à chaque nouvelle exécution du programme, simulant ainsi un comportement aléatoire. Il est possible de définir la même graine pour toutes les exécutions d'un programme en appelant la fonction random.seed(). Le programme suivant utilise le générateur de nombres aléatoires pour simuler le comportement d'une IA qui joue à "Pierre, feuille, ciseaux". Pour cet exercice, vous devez commencer par analyser le code suivant et le comprendre. Ensuite, à l'aide de la fonction random.seed, modifiez ce programme pour être certain de toujours gagner les X premiers coups du jeu, avec X dépendant de votre capacité mémoire à vous, utilisateur humain.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/env python3
"""Papier caillou ciseaux"""

import random

def main():
    """point d'entrée du programme"""

    plays = ["paper", "rock", "scissors"]

    while True:

        player = input("paper, rock, scissors ?\n")
        computer = plays[random.randint(0, 2)]

        if player == computer:
            print("Égalité!")
        elif player == "rock":
            if computer == "paper":
                print("You lose!", computer, "covers", player)
            else:
                print("You win!", player, "smashes", computer)
        elif player == "paper":
            if computer == "scissors":
                print("You lose!", computer, "cut", player)
            else:
                print("You win!", player, "covers", computer)
        elif player == "scissors":
            if computer == "rock":
                print("You lose...", computer, "smashes", player)
            else:
                print("You win!", player, "cut", computer)
        else:
            print("Invalid play. Check your spelling please !")

main()

Difficulté

star star

Correction

Cliquez ici pour révéler la correction de l'exercice.

Corrigé du fichier le_hasard_fait_bien_les_choses.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/usr/bin/env python3
"""Papier caillou ciseaux"""

import random

def main():
    """point d'entrée du programme"""

    # Initialisation du générateur aléatoire avec
    # une graine constante d'une exécution à l'autre
    # pour toujours obtenir la même suite de nombres
    # aléatoires.
    random.seed(42)

    plays = ["paper", "rock", "scissors"]

    while True:

        player = input("paper, rock, scissors ?\n")

        # La fonction random.randint(a, b) renvoie un entier
        # aléatoire dans l'intervalle [a, b]
        computer = plays[random.randint(0, 2)]

        if player == computer:
            print("Égalité!")
        elif player == "rock":
            if computer == "paper":
                print("You lose!", computer, "covers", player)
            else:
                print("You win!", player, "smashes", computer)
        elif player == "paper":
            if computer == "scissors":
                print("You lose!", computer, "cut", player)
            else:
                print("You win!", player, "covers", computer)
        elif player == "scissors":
            if computer == "rock":
                print("You lose...", computer, "smashes", player)
            else:
                print("You win!", player, "cut", computer)
        else:
            print("Invalid play. Check your spelling please !")

main()

Explications

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# dans l'interpréteur python :
>>> import random
>>> sequence = [random.randint(0, 10), random.randint(0, 10), random.randint(0, 10), random.randint(0, 10)]
>>> sequence
[9, 8, 6, 0]
>>> random.choice(sequence)
8
>>> random.choice(sequence)
0
>>> random.choice(sequence)
8
>>> random.choice(sequence)
9