2008-12-15 29 views

Respuesta

47
#!/usr/bin/python 

import random 
import string 

digits = "".join([random.choice(string.digits) for i in xrange(8)]) 
chars = "".join([random.choice(string.letters) for i in xrange(15)]) 
print digits + chars 

EDIT: le gusta la idea de usar random.choice mejor que randint() por lo que he actualizado el código para reflejar eso.

Nota: esto supone que se desean caracteres en minúscula y mayúscula. Si minúsculas sólo entonces cambiar la segunda lista por comprensión para leer:

chars = "".join([random.choice(string.letters[:26]) for i in xrange(15)]) 

Obviamente para mayúsculas solamente Sólo puede voltear que todo lo que el corte es [26:] en lugar de al revés.

+0

Niza respuesta! (Nunca antes había visto random.choice.) –

+0

Guarde las recetas como marcador - http://code.activestate.com/recipes/ – gimel

+1

Probablemente más legible para usar string.lowercase y string.uppercase que cortar la lista. Además, la solución solo se cumple si el OP está satisfecho con solo caracteres ASCII, si quiere generar cadenas a partir de todo el conjunto de caracteres Unicode, el problema se vuelve mucho más difícil. –

13

Ver un ejemplo - Recipe 59873: Random Password Generation.

Sobre la base de la receta, aquí hay una solución a su pregunta:

from random import choice 
import string 

def GenPasswd2(length=8, chars=string.letters + string.digits): 
    return ''.join([choice(chars) for i in range(length)]) 

>>> GenPasswd2(8,string.digits) + GenPasswd2(15,string.ascii_letters) 
'28605495YHlCJfMKpRPGyAw' 
>>> 
3

random.sample es una opción alternativa. La diferencia, como se puede encontrar en python.org documentation, es que random.sample muestras sin reemplazo. Por lo tanto, random.sample(string.letters, 53) daría como resultado un ValueError. A continuación, si desea generar su cadena aleatoria de ocho dígitos y quince caracteres, podría escribir

import random, string 

digits = ''.join(random.sample(string.digits, 8)) 
chars = ''.join(random.sample(string.letters, 15)) 
0

Aquí es una versión más simple:

import random 
import string 

digits = "".join([random.choice(string.digits+string.letters) for i in xrange(10)]) 
print digits 
Cuestiones relacionadas