169 votes

Générer une lettre aléatoire en Python

Existe-t-il un moyen de générer des lettres aléatoires en Python (comme random.randint mais pour les lettres) ? La fonctionnalité de plage de random.randint serait bien, mais avoir un générateur qui produit juste une lettre aléatoire serait mieux que rien.

282voto

Mark Rushakoff Points 97350

Simple :

>>> import string
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> import random
>>> random.choice(string.ascii_letters)
'j'

string.ascii_letters renvoie une chaîne de caractères contenant les lettres minuscules et majuscules selon la locale actuelle.

random.choice renvoie un élément unique et aléatoire d'une séquence.

14 votes

Il s'agit en fait de string.ascii_lowercase ou string.ascii_uppercase.

11 votes

Souvent, j'ai besoin d'une chaîne d'aléas, voici ce qu'il en est (après from string import ascii_letters, digits et from random import choice ) : ''.join([choice(ascii_letters + digits) for i in range(32)])

7 votes

@joaquin string.letters est présent dans python 2.7.7.

75voto

joaquin Points 22450
>>> import random
>>> import string
>>> random.choice(string.ascii_letters)
'g'

0 votes

Il peut s'agir de minuscules ou de majuscules. Je ne sais pas si c'est ce qui est nécessaire.

4 votes

@TaylorLeese, comme j'ai su qu'il y a trois options dont ascii_letters , ascii_uppercase et ascii_lowercase .

40voto

Saad Points 381
>>>def random_char(y):
       return ''.join(random.choice(string.ascii_letters) for x in range(y))

>>>print (random_char(5))
>>>fxkea

pour générer un nombre y de caractères aléatoires

8 votes

également : ''.join(random.sample(string.ascii_lowercase,5))

0 votes

@Dannid Doesn't random.sample() retourner un unique ensemble de valeurs à partir de l'entrée, ce qui n'est pas la même chose que random.choice() ?

0 votes

Oui, mais si vous ne choisissez qu'une seule lettre, cela ne fait pas de différence. En outre, vous pouvez vouloir 5 lettres uniques - le PO n'a pas précisé, et les deux random.choice et random.randint renvoient une seule valeur. Vous pouvez également utiliser numpy.random.choice pour donner un ensemble unique si vous ajoutez replace=False, comme ceci : numpy.random.choice(string.ascii_lowercase, size=5, replace=False)

22voto

Taylor Leese Points 18895
>>> import random
>>> import string    
>>> random.choice(string.ascii_lowercase)
'b'

14voto

rlotun Points 3995

Une autre façon, pour être complet :

>>> chr(random.randrange(97, 97 + 26))

Utilisez le fait que ascii "a" est 97, et il y a 26 lettres dans l'alphabet.

Lors de la détermination de la limite supérieure et inférieure de la random.randrange() n'oubliez pas que la fonction random.randrange() est exclusif sur sa limite supérieure, ce qui signifie qu'il ne générera jamais qu'un entier jusqu'à 1 unité de moins que la valeur fournie.

3 votes

Cela dépend de l'alphabet dont on parle ;-)

0 votes

ne devrait-il pas être chr(random.randrange(97, 97 + 26 - 1)) ?

1 votes

@zhongxiao37 Vraiment, ça devrait être chr(random.randrange(97, 97 + 26) . random.randrange() est exclusif sur sa limite supérieure, ce qui signifie que pour obtenir la gamme complète de caractères 97 - 122 l'argument passé doit être 123 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X