Les nombres aléatoires peuvent être générés à l'aide des fonctions random(), uniform(), randange() et randint() du module random de la bibliothèque standard Python.
Le module random est inclus dans la bibliothèque standard, aucune installation supplémentaire n'est donc nécessaire. Bien sûr, vous devez l'importer.
Les informations suivantes sont fournies ici.
random.random()
(Nombre à virgule flottante entre 0,0 et 1,0)random.uniform()
(Toute plage de nombres à virgule flottante)- Générer des nombres aléatoires qui suivent une distribution normale, une distribution gaussienne, etc.
random.randrange()
(Entier de gamme et de pas arbitraires)random.randint()
(Un nombre entier dans une plage quelconque)- Génération d'une liste avec des nombres aléatoires comme éléments
- Liste de nombres aléatoires à virgule flottante
- Liste de nombres entiers aléatoires
- Initialiser le générateur de nombres aléatoires (fixer la graine de nombres aléatoires)
Consultez l'article suivant pour savoir comment extraire ou trier de manière aléatoire les éléments d'une liste.
- Articles connexes :Sélection d'éléments aléatoires dans une liste en Python à l'aide de choice(), sample(), choices()
- random.random() (Nombre à virgule flottante entre 0,0 et 1,0)
- random.uniform() (Toute plage de nombres à virgule flottante)
- Générer des nombres aléatoires qui suivent une distribution normale, une distribution gaussienne, etc.
- random.randrange() (Entier de gamme et de pas arbitraires)
- random.randint() (Un nombre entier dans une plage quelconque)
- Génération d'une liste avec des nombres aléatoires comme éléments
- Initialiser le générateur de nombres aléatoires (fixer la graine de nombres aléatoires)
random.random() (Nombre à virgule flottante entre 0,0 et 1,0)
La fonction random() du module random génère un nombre aléatoire à virgule flottante de type float compris entre 0,0 et 1,0.
import random
print(random.random())
# 0.4496839011176701
random.uniform() (Toute plage de nombres à virgule flottante)
uniform(a, b)
Les fonctions de ce module aléatoire génèrent des nombres aléatoires de type flottant dans l'une des plages suivantes
a <= n <= b
b <= n <= a
import random
print(random.uniform(100, 200))
# 175.26585048238275
Les deux arguments peuvent être soit plus grands soit plus petits ; s'ils sont égaux, ils ne renverront naturellement que cette valeur. La valeur de retour est toujours un flottant.
print(random.uniform(100, -100))
# -27.82338731501028
print(random.uniform(100, 100))
# 100.0
L'argument peut également être spécifié comme un flottant.
print(random.uniform(1.234, 5.637))
# 2.606743596829249
L'inclusion de la valeur de b dans l'intervalle dépend de l'arrondi suivant, tel que documenté.a + (b-a) * random.random()
Le fait que la valeur du point final b soit dans la plage ou non dépend de l'arrondi en virgule flottante dans l'équation suivante
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation
Générer des nombres aléatoires qui suivent une distribution normale, une distribution gaussienne, etc.
Les fonctions random() et uniform() ci-dessus génèrent des nombres aléatoires uniformément distribués, mais il existe également des fonctions permettant de générer des nombres à virgule flottante qui suivent la distribution suivante.
- distribution bêta:
random.betavariate()
- distribution exponentielle:
random.expovariate()
- distribution gamma:
random.gammavariate()
- distribution gaussienne:
random.gauss()
- distribution lognormale:
random.lognormvariate()
- distribution normale:
random.normalvariate()
- Distribution de Von Mises:
random.vonmisesvariate()
- Distribution de Pareto:
random.paretovariate()
- Distribution de Weibull:
random.weibullvariate()
Les paramètres de chaque distribution sont spécifiés par des arguments. Voir la documentation officielle pour plus de détails.
random.randrange() (Entier de gamme et de pas arbitraires)
randrange(start, stop, step)
La fonction de ce module aléatoire renvoie un élément choisi au hasard parmi les éléments suivants.range(start, stop, step)
Comme avec range(), les arguments start et step peuvent être omis. S'ils sont omis, start=0 et step=1.
import random
print(list(range(10)))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(random.randrange(10))
# 5
L'argument step peut être défini pour générer un entier aléatoire pair ou impair, ou un entier aléatoire qui est un multiple de trois.
Par exemple, si start est pair et step=2, seuls les entiers pairs de l'intervalle peuvent être obtenus de manière aléatoire.
print(list(range(10, 20, 2)))
# [10, 12, 14, 16, 18]
print(random.randrange(10, 20, 2))
# 18
random.randint() (Un nombre entier dans une plage quelconque)
randint(a, b)
La fonction de ce module aléatoire renvoie le nombre entier aléatoire suivant.a <= n <= b
randrange(a, b + 1)
Équivalent à ceci ; notez que la valeur de b est également incluse dans la plage.
print(random.randint(50, 100))
# print(random.randrange(50, 101))
# 74
Génération d'une liste avec des nombres aléatoires comme éléments
Dans cette section, nous allons expliquer comment utiliser le module random de la bibliothèque standard pour générer une liste dont les éléments sont des nombres aléatoires.
Liste de nombres aléatoires à virgule flottante
Pour générer une liste dont les éléments sont des nombres aléatoires à virgule flottante, combinez les fonctions random() et uniform() avec la notation de compréhension de liste.
import random
print([random.random() for i in range(5)])
# [0.5518201298350598, 0.3476911314933616, 0.8463426180468342, 0.8949046353303931, 0.40822657702632625]
Dans l'exemple ci-dessus, range() est utilisé, mais les listes et les tuples sont également possibles pour le nombre d'éléments souhaité. Pour plus de détails sur les compréhensions de listes, veuillez vous référer à l'article suivant.
- Articles connexes :Utilisation de la notation des compréhensions de listes en Python
Liste de nombres aléatoires entiers
Lors de la génération d'une liste dont les éléments sont des nombres aléatoires entiers, la combinaison des fonctions randange() et randint() ci-dessus avec la notation de compréhension de liste peut donner lieu à des valeurs en double.
print([random.randint(0, 10) for i in range(5)])
# [8, 5, 7, 10, 7]
Si vous souhaitez réaliser une séquence aléatoire d'entiers sans duplication, extrayez les éléments de range() avec un intervalle arbitraire en utilisant random.sample().
print(random.sample(range(10), k=5))
# [6, 4, 3, 7, 5]
print(random.sample(range(100, 200, 10), k=5))
# [130, 190, 140, 150, 170]
Pour plus d'informations sur random.sample(), veuillez consulter l'article suivant.
- Articles connexes :Sélection d'éléments aléatoires dans une liste en Python à l'aide de choice(), sample(), choices()
Initialiser le générateur de nombres aléatoires (fixer la graine de nombres aléatoires)
En donnant un nombre entier arbitraire à la fonction seed() du module random, la graine de nombre aléatoire peut être fixée et le générateur de nombre aléatoire peut être initialisé.
Après l'initialisation avec la même graine, la valeur aléatoire est toujours générée de la même manière.
random.seed(0)
print(random.random())
# 0.8444218515250481
print(random.random())
# 0.7579544029403025
random.seed(0)
print(random.random())
# 0.8444218515250481
print(random.random())
# 0.7579544029403025