Génération de décimales et d’entiers aléatoires en Python, y compris random(), randrange() et randint()

Affaires

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.

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.

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.

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