2008-12-15 1 views

ответ

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: понравилась идея использования random.choice лучше, чем randint(), поэтому я обновил код для отражают это.

Примечание: это предполагает, что требуются символы в нижнем и верхнем регистре. Если в нижнем регистре только затем изменить второй список понимание следующего содержания:

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

Очевидно, что для прописные только вы можете просто перевернуть, что вокруг так слайс [26:] вместо наоборот.

+0

Хороший ответ! (Раньше я даже не видел random.choice.) – 2008-12-15 06:35:40

13

См. Пример - Recipe 59873: Random Password Generation.

Строительство по рецепту, вот это решение на ваш вопрос:

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 - альтернативный вариант. Разница, как можно найти в python.org documentation, заключается в том, что random.sample образцов без замены. Таким образом, random.sample(string.letters, 53) приведет к ValueError. Затем, если вы хотите, чтобы сгенерировать случайную строку из восьми цифр и пятнадцать символов, можно было бы написать

import random, string 

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

Вот простой вариант:

import random 
import string 

digits = "".join([random.choice(string.digits+string.letters) for i in xrange(10)]) 
print digits 
Смежные вопросы