2010-05-12 40 views
81

¿Hay alguna manera de generar letras aleatorias en Python (como random.randint pero para letras)? La funcionalidad de rango de random.randint sería agradable, pero tener un generador que solo genere una letra aleatoria sería mejor que nada.Generar una letra aleatoria en Python

Respuesta

145

simple:

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

string.letters devuelve una cadena que contiene el minúsculas y mayúsculas de acuerdo con la localización actual; si eso no es aceptable, string.ascii_letters probablemente haga el truco.

random.choice devuelve un único elemento aleatorio de una secuencia.

+3

De hecho, es string.ascii_lowercase o string.ascii_uppercase. –

+25

string.letters desapareció después de Python 2.6. En python 3.1 debe usar string.ascii_letters que también está presente en python 2.6 – joaquin

+4

A menudo, necesito una cadena de randoms, aquí está eso (después de 'from string import ascii_letters, digits' y' from random selection choice'): ''' .join ([choice (ascii_letters + digits) for i in range (32)]) ' – Devin

54
>>> import random 
>>> import string 
>>> random.choice(string.ascii_letters) 
'g' 
+0

Esto puede ser menor o mayúscula. No estoy seguro si eso es lo que se necesita. –

7

Otra forma, para lo completo:

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

uso del hecho de que ascii 'a' es 97, y hay 26 letras en el alfabeto.

+2

Eso depende de qué alfabeto estamos hablando ;-) – Joey

20
>>> import random 
>>> import string  
>>> random.choice(string.ascii_lowercase) 
'b' 
4
def randchar(a, b): 
    return chr(random.randint(ord(a), ord(b))) 
-3

Tal vez esto le puede ayudar:

import random 
for a in range(64,90): 
    h = random.randint(64, a) 
    e += chr(h) 
print e 
19
>>>def random_char(y): 
     return ''.join(random.choice(string.ascii_letters) for x in range(y)) 

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

para generar y número de caracteres aleatorios

+5

también: ''' .join (random.sample (string.ascii_lowercase, 5))' – Dannid

+0

@Dannid Does not 'random.sample() 'devuelve un * conjunto * único de valores de la entrada, que no es lo mismo que' random.choice() '? – Droppy

+0

Sí, aunque si elige solo una letra que no hace una diferencia Además, puede querer 5 letras únicas: el OP no especificó, y tanto 'random.choice' como' random.randint' devuelven un valor único También puede usar 'numpy.random.choice' para dar un conjunto único si agrega replace = False, así:' numpy.random.choice (string.ascii_lowercase, size = 5, replace = False) ' – Dannid

-6

Colocar un pitón en el teclado y dejar que ruede sobre las letras hasta que encuentres tu combo aleatorio preferido ¡Es una broma!

import string #This was a design above but failed to print. I remodled it. 
import random 
irandom = random.choice(string.ascii_letters) 
print irandom 
+2

Bienvenido a Stack ¡Rebosar! Si bien esta es una buena respuesta, es idéntica a la respuesta ya publicada y aceptada por @MarkRushakoff, respondida hace dos años. Revise las respuestas antes de publicar para que podamos mantener baja la relación señal/ruido. – Hooked

-1
import string 
import random 

KEY_LEN = 20 

def base_str(): 
    return (string.letters+string.digits) 
def key_gen(): 
    keylist = [random.choice(base_str()) for i in range(KEY_LEN)] 
    return ("".join(keylist)) 

Puede obtener cadenas aleatorias como esto:

g9CtUljUWD9wtk1z07iF 
ndPbI1DDn6UvHSQoDMtd 
klMFY3pTYNVWsNJ6cs34 
Qgr7OEalfhXllcFDGh2l 
2
import random 
def guess_letter(): 
    return random.choice('abcdefghijklmnopqrstuvwxyz') 
2

puede simplemente hacer una lista:

import random 
list1=[a,b,c,d,e,f,g,h] 
b=random.randint(0,7) 
print(list1[b]) 
1

Usted puede utilizar esto para conseguir uno o más letras al azar

import random 
import string 
random.seed(10) 
letters = string.ascii_lowercase 
rand_letters = random.choices(letters,k=5) # where k is the number of required rand_letters 

print(letters) 

['o', 'l', 'p', 'f', 'v'] 
+0

Mejoraría la calidad de su respuesta si proporciona información sobre lo que ha hecho. Además, como esta pregunta tiene una respuesta aceptada, ¿por qué su solución es diferente? –

-1

bien, esta es mi respuesta! Funciona bien. Sólo hay que poner el número de letras al azar que desee en 'número' ... (Python 3)

import random 

def key_gen(): 
    keylist = random.choice('abcdefghijklmnopqrstuvwxyz') 
    return keylist 

number = 0 
list_item = '' 
while number < 20: 
    number = number + 1 
    list_item = list_item + key_gen() 

print(list_item) 
-2
import string 
import random 

def random_char(y): 
    return ''.join(random.choice(string.ascii_letters+string.digits+li) for x in range(y)) 
no=int(input("Enter the number of character for your password= ")) 
li = random.choice('[email protected]#$%^*&()_+}{') 
print(random_char(no)+li) 
+1

Debe formatear y describir su respuesta – ted

Cuestiones relacionadas