TP6. 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.
- Commencez pour jouer un peu avec ce module dans l'interpréteur python. Importez d'abord le module
random
en saisissant la ligne :
import random
puis lisez l'aide en ligne des fonctions random.randint
et random.choice
.
-
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()
. -
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. -
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 fonctionrandom.seed
, modifiez ce programme pour être certain de toujours gagner lesX
premiers coups du jeu, avecX
dépendant de votre capacité mémoire à vous, utilisateur humain.
#!/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é
Correction
Cliquez ici pour révéler la correction de l'exercice.
Corrigé du fichier le_hasard_fait_bien_les_choses.py
#!/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
# 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