Choisir des données au hasard en avec le module Random de Python

Vous souhaitez sélectionner des éléments aléatoires dans une séquence ou générer des nombres aléatoires.

Le module random dispose de diverses fonctions pour les nombres aléatoires et le prélèvement d’éléments aléatoires. Par exemple, pour choisir un élément aléatoire dans une séquence, utilisez random.choice():

>>> import random
>>> valeurs = [1, 2, 3, 4, 5, 6]
>>> random.choice(valeurs)
2
>>> random.choice(valeurs)
3
>>> random.choice(valeurs)
1
>>> random.choice(valeurs)
4
>>> random.choice(valeurs)
6
>>>

Pour prendre un échantillon de N éléments où les éléments sélectionnés sont retirés d’un traitement ultérieur, utilisez plutôt random.sample():

>>> random.sample(valeurs, 2)
[6, 2]
>>> random.sample(valeurs, 2)
[4, 3]
>>> random.sample(valeurs, 3)
[4, 3, 1]
>>> random.sample(valeurs, 3)
[5, 4, 1]
>>>

Si vous voulez tout simplement mélanger les éléments dans une séquence en place, utilisez random.shuffle():

>>> random.shuffle(valeurs)
>>> valeurs
[2, 4, 6, 5, 3, 1]
>>> random.shuffle(valeurs)
>>> valeurs
[3, 5, 2, 1, 6, 4]
>>>

Pour produire des entiers aléatoires, utilisez random.randint():

>>> random.randint(0,10)
2
>>> random.randint(0,10)
5
>>> random.randint(0,10)
0
>>> random.randint(0,10)
7
>>> random.randint(0,10)
10
>>> random.randint(0,10)
3
>>>

Pour produire des valeurs uniformes en virgule flottante dans la plage de 0 à 1, utilisez random.random():

>>> random.random()
0.9406677561675867
>>> random.random()
0.133129581343897
>>> random.random()
0.4144991136919316
>>>

Pour obtenir N bits aléatoires exprimés en entier, utilisez random.getrandbits():

>>> random.getrandbits(200)
335837000776573622800628485064121869519521710558559406913275
>>>

Le module random calcule des nombres aléatoires à l’aide de l’algorithme de Mersenne Twister. C’est un algorithme déterministe, mais vous pouvez modifier la valeur Seed initiale en utilisant la fonction random.seed(). Par exemple:

random.seed() # Seed basé sur le temps système ou os.urandom()
random.seed(12345) # Seed basée sur un entier donné
random.seed(b'bytedata') # Seed basée sur les données des octets

En plus de la fonctionnalité montrée, random() inclut des fonctions pour les distributions de probabilités uniformes, gaussiennes et autres.

Par exemple, random.uniform() calcule des nombres distribués uniformément, et random.gauss() calcule des nombres normalement distribués. Consultez la documentation pour plus d’informations sur les autres distributions prises en charge.

Les fonctions de random() ne doivent pas être utilisées dans les programmes liés à la cryptographie.

Si vous avez besoin d’une telle fonctionnalité, pensez à utiliser les fonctions du module ssl à la place. Par exemple, ssl.RAND_bytes() peut être utilisé pour générer une séquence cryptographique sécurisée d’octets aléatoires.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here