Générer des nombres pseudo-aléatoires en Python
Sommaire
- 1- Objectifs
- 2- Présentation
- 3- importer la bibliothèque random
- 4- La fonction
random()
- 5- La méthode
random.seed()
- 5.1- Définition et utilisation
- 5.2- Syntaxe et paramètre
- 5.3- Exemples
- 6- Générer des valeurs à virgule flottante aléatoires
- 6.1- Utiliser random()
- 6.2- Utiliser uniform()
- 7- Générer des valeurs entières aléatoires entre deux bornes
- 7.1- Utiliser
randint()
- 7.2- Utiliser randrange()
- 8- Créez une liste de nombres aléatoires sans doublons
- 9- Générer aléatoirement un sous-ensemble d'une liste
- 10- Applications
- 10.1- App01
- 10.1.1- Énoncé
- 10.2- App02
- 10.2.1- Énoncé
- 10.3- App03
- 10.3.1- Énoncé
- 10.3.2- Sommaire du cours Python
Générer des nombres pseudo-aléatoires en Python
-
Objectifs
- Etre capable de générer un nombre aléatoire en Python.
- Apprendre à utiliser
random.seed()
pour initialiser le générateur de nombres pseudo-aléatoires. -
Présentation
- Python a un module intégré que vous pouvez utiliser pour créer des nombres aléatoires.
- Le nombre aléatoire ou les données générées par le module aléatoire de Python ne sont pas vraiment aléatoires; il est pseudo-aléatoire, c’est-à-dire déterministe.
- Le module aléatoire utilise la valeur de départ comme base pour générer un nombre aléatoire.
-
importer la bibliothèque random
- En Python, pour générer aléatoirement un nombre, il faut d’abord importer la bibliothèque random en plaçant en début de programme l’instruction
from random import *
. Ensuite, on obtient un entier aléatoire avec la fonction randint(0,100). -
La fonction
random()
- La bibliothèque standard Python fournit un module appelé
random
, qui contient un ensemble de fonctions pour générer des nombres aléatoires. - La fonction
random()
génère un nombre aléatoire compris entre zéro et un [0, 0.1..1]. Les nombres générés avec ce module ne sont pas vraiment aléatoires mais ils sont assez aléatoires pour la plupart des buts. - Le module
random
dispose d’un ensemble de méthodes: -
La méthode
random.seed()
-
Définition et utilisation
- La méthode
seed()
est utilisée pour initialiser le générateur de nombres aléatoires. - Le générateur de nombres aléatoires a besoin d’un nombre pour commencer (une valeur de départ), pour pouvoir générer un nombre aléatoire.
- Par défaut, le générateur de nombres aléatoires utilise l’ heure système actuelle.
- Utilisez la méthode
seed ()
pour personnaliser le numéro de départ du générateur de nombres aléatoires. -
Syntaxe et paramètre
random.seed(a, version)
- Cette fonction accepte deux paramètres. Les deux sont facultatifs.
a
: est la valeur de départ. Si la a valeur estNone
, alors par défaut, l’heure système actuelle est utilisée. Si des sources aléatoires sont fournies par le système d’exploitation, elles sont utilisées à la place de l’heure système. Si la valeur de départ est sous la forme d’un entier est utilisé tel quel.version
: 2 (par défaut), un objet str, bytes ou bytearray est converti en un int et tous ses bits sont utilisés.-
Exemples
- Générer le même nombre à chaque fois
- Nous avons obtenu le même nombre car nous les avons prédéfinis avec la même valeur avant d’appeler
random.randint()
. - Générer un nombre différent à chaque fois
-
Générer des valeurs à virgule flottante aléatoires
-
Utiliser random()
- En appelant les fonctions
seed()
etrandom()
à partir du module aléatoire Python, on peut également générer des valeurs à virgule flottante aléatoires. - Les valeurs seront générées entre 0 et 1.
- L’exemple ci-dessous génère 10 valeurs à virgule flottante aléatoires.
-
Utiliser uniform()
- Si vous avez besoin de générer des flottants aléatoires situés dans un intervalle [x, y] spécifique, vous pouvez utiliser
random.uniform ()
random.uniform(10, 35)
-
Générer des valeurs entières aléatoires entre deux bornes
-
Utiliser
randint()
- La méthode
randint()
renvoie un élément sélectionné de nombre entier dans la plage spécifiée. - Syntaxe:
randint (début, fin)
- Paramètres :
(début, fin)
: les deux doivent être des valeurs de type entier. -
Utiliser randrange()
- Avec
random.randrange()
, vous pouvez exclure le côté droit de l’intervalle, ce qui signifie que le nombre généré se trouve toujours entre [x, y) et sera toujours plus petit que l’extrémité droite. -
Créez une liste de nombres aléatoires sans doublons
- il existe un moyen simple de générer une liste de nombres aléatoires uniques. En utilisant
random.sample ()
, nous pouvons créer une liste de nombres aléatoires uniques. -
Générer aléatoirement un sous-ensemble d’une liste
-
Applications
-
App01
-
Énoncé
- Écrivez un programme Python qui simule le lancer de deux dés à six faces. Le programme devrait générer deux nombres pseudo-aléatoires entre 1 et 6 inclus pour représenter les faces des dés. Ensuite, le programme devrait afficher les résultats des deux lancers et la somme des deux nombres.
- Voici un exemple de sortie attendue :
-
App02
-
Énoncé
- Utiliser python pour réaliser un jeu du « jeu_plus_ou_moins » dans lequel :
- L’ordinateur « choisit » un nombre « au hasard » entre 0 et 100,
- L’utilisateur fait une proposition à laquelle
- L’ordinateur répond plus « plus grand » ou « plus petit » suivant la valeur de la proposition.
- L’utilisateur refait une proposition jusqu’à avoir trouvé la bonne réponse.
- L’ordinateur indique le nombre d’essais effectués.
-
App03
-
Énoncé
- Écrivez un programme Python qui génère aléatoirement les notes de plusieurs étudiants pour une certaine matière. Le nombre d’étudiants et les notes sont générés de manière pseudo-aléatoire. Ensuite, votre programme doit calculer la moyenne de ces notes et l’afficher.
- Consignes :
- Utilisez le module random pour générer les notes pseudo-aléatoires des étudiants.
- Générez un nombre aléatoire d’étudiants (par exemple, entre 5 et 15).
- Générez les notes aléatoires pour chaque étudiant (par exemple, entre 0 et 20).
- Stockez les notes dans une liste.
- Utilisez les opérations sur les listes pour calculer la moyenne des notes.
- Affichez la moyenne des notes avec un message approprié.
- Voici un exemple de sortie attendue :
- Assurez-vous de gérer les types de données correctement pour stocker les notes et effectuer les calculs de moyenne. Amusez-vous bien ! Si vous avez des questions ou besoin d’aide, n’hésitez pas à demander.
Méthode | Description |
---|---|
seed() | Initialiser le générateur de nombres aléatoires |
getstate() | Renvoie l’état interne actuel du générateur de nombres aléatoires |
setstate() | Restaure l’état interne du générateur de nombres aléatoires |
getrandbits() | Renvoie un nombre représentant les bits aléatoires |
randrange() | Renvoie un nombre aléatoire entre la plage donnée |
randint() | Renvoie un nombre aléatoire entre la plage donnée |
choice() | Renvoie un élément aléatoire de la séquence donnée |
choices() | Renvoie une liste avec une sélection aléatoire de la séquence donnée |
shuffle() | Prend une séquence et renvoie la séquence dans un ordre aléatoire |
sample() | Renvoie un échantillon donné d’une séquence |
random() | Renvoie un nombre flottant aléatoire entre 0 et 1 |
uniform() | Renvoie un nombre flottant aléatoire entre deux paramètres donnés |
triangular() | Renvoie un nombre flottant aléatoire entre deux paramètres donnés, vous pouvez également définir un paramètre de mode pour spécifier le point médian entre les deux autres paramètres |
betavariate() | Renvoie un nombre flottant aléatoire entre 0 et 1 basé sur la distribution bêta (utilisée dans les statistiques) |
expovariate() | Renvoie un nombre flottant aléatoire basé sur la distribution exponentielle (utilisée dans les statistiques) |
gammavariate() | Renvoie un nombre flottant aléatoire basé sur la distribution Gamma (utilisé dans les statistiques) |
gauss() | Renvoie un nombre flottant aléatoire basé sur la distribution gaussienne (utilisé dans les théories des probabilités) |
lognormvariate() | Renvoie un nombre flottant aléatoire basé sur une distribution log-normale (utilisée dans les théories des probabilités) |
normalvariate() | Renvoie un nombre flottant aléatoire basé sur la distribution normale (utilisée dans les théories des probabilités) |
vonmisesvariate() | Renvoie un nombre flottant aléatoire basé sur la distribution de von Mises (utilisé dans les statistiques directionnelles) |
paretovariate() | Renvoie un nombre flottant aléatoire basé sur la distribution de Pareto (utilisée dans les théories des probabilités) |
weibullvariate() | Renvoie un nombre flottant aléatoire basé sur la distribution de Weibull (utilisé dans les statistiques) |
import random
print ("Nombre aléatoire avec seed 30")
random.seed(30)
print ("premier numéro ", random.randint(25,50))
random.seed(30)
print ("Deuxième numéro ", random.randint(25,50))
random.seed(30)
print ("Troisième numéro ", random.randint(25,50))
import random
print("Random number with seed 30")
random.seed(30)
print("Premier numéro ", random.randint(25, 50))
print("Deuxième numéro ", random.randint(25, 50))
print("Troisième numéro ", random.randint(25, 50))
# générer des valeurs à virgule flottante aléatoires
from random import seed
from random import random
# générateur de nombres aléatoires de départ
seed(4)
# générer des nombres aléatoires entre 0-1
for i in range(10):
value = random()
print(value)
import random
random.seed(2)
print(random.uniform(10,35))
import random
randomList = []
# Définissez la longueur de la liste sur 10
for i in range(0, 10):
# Tous les nombres aléatoires de 0 à 100
randomList.append(random.randint(0, 100))
print("Impression de la liste de 10 nombres aléatoires")
print(randomList)
import random
# Générer 'n' nombres aléatoires uniques dans une plage
randomList = random.sample(range(0, 100), 10)
print(randomList)
from random import seed
from random import sample
seed(6)
list1 = [i for i in range(6)]
print(list1)
# select a subset
sousList = sample(list1, 3)
print(sousList)
Premier dé : 3
Deuxième dé : 5
Somme des deux dés : 8
Solution
import random
# Génération des nombres pseudo-aléatoires pour les lancers de dés
de1 = random.randint(1, 6)
de2 = random.randint(1, 6)
# Affichage des résultats des deux lancers et de leur somme
print("Premier dé :", de1)
print("Deuxième dé :", de2)
print("Somme des deux dés :", de1 + de2)
Solution
import random
nombre_secret = random.randint(0, 100)
nombre_d_essais = 0
print("Bienvenue dans le jeu du Plus ou Moins !")
while True:
proposition = int(input("Devinez le nombre (entre 0 et 100) : "))
nombre_d_essais += 1
if proposition < nombre_secret:
print("Plus grand !")
elif proposition > nombre_secret:
print("Plus petit !")
else:
print("Félicitations ! Vous avez trouvé le nombre secret en", nombre_d_essais, "essais.")
break
Nombre d'étudiants : 10
Notes des étudiants : [15, 12, 18, 10, 16, 14, 11, 19, 17, 13]
Moyenne des notes : 14.5
Solution
import random
# Génération aléatoire du nombre d'étudiants entre 5 et 15
nombre_etudiants = random.randint(5, 15)
# Génération des notes aléatoires pour chaque étudiant
notes = random.choices(range(21), k=nombre_etudiants)
# Calcul de la moyenne des notes
moyenne = sum(notes) / nombre_etudiants
# Affichage des résultats
print("Nombre d'étudiants :", nombre_etudiants)
print("Notes des étudiants :", notes)
print("Moyenne des notes :", moyenne)