Форум сайта python.su
Пытаюсь изобразить консольный генератор паролей.
Простой пример:
from random import randint as rnd
pw = ''
pwl = rnd(15, 25)
while len(pw) < pwl:
pw += chr(rnd(0x30, 0xFF))
print(pw)
Офлайн
Странно, у меня этот код отрабатывает, причем генерит совершенно разные последовательности
35ЙyђЛ—Ж:\АЦ0˜в‰EЪћ
™Џa•Qо3ЇIФэcP¦t™|®И
ЛRШмЃТИял鬻E‚BПRѕХ
`љQ†Сs7rчqГџЁЫD€ыWњ
o|њИен•ёfЎ‰ўiѓCх G«
њ›vwfцмKhwemЌJMиГ;©
@}ЊѕBЎІ@dU‘Гѓћ…8т«ў
J“›ИђJсжr5нтљ0ЌЅљ@Э
°b«м0Hьvфф^щYх0Н°~Ы
СУtҐЊНЫ¦‚—ВTZЕlЎДvт
Отредактировано (Ноя. 23, 2009 11:37:08)
Офлайн
:) может просто вам не везет, это все таки рандом ?
Отредактировано (Ноя. 23, 2009 11:37:12)
Офлайн
Мда… Я пример пересократил. В “реальной жизни” я всё-таки выбираю не все символы, так что распределение выборки может поплыть. Так что на сам рандом тут гнать преждевременно. Ступил.
Вот пример получше:
pw = ''
pwl = rnd(15, 25)
while len(pw) < pwl:
ch = chr(rnd(0x30, 0xFF))
if (ch >= 'A')&(ch <= 'Z'): pw += ch
elif (ch >= 'a')&(ch <= 'z'): pw += ch
elif (ch >= '0')&(ch <= '9'): pw += ch
elif '`~!@#$%^&*(){}[]?_+-="|/\<>,.'.find(ch) >= 0: pw += ch
# elif (ch >= 'А')&(ch <= 'Я'): pw += ch
# elif (ch >= 'а')&(ch <= 'я'): pw += ch
print pw
Отредактировано (Ноя. 23, 2009 12:40:16)
Офлайн
А для чего такие сложности?
Можно же облагородить как-то:
from string import digits, letters, punctuation
from random import randint, choice
seq = digits + letters + punctuation
pwl = rnd(15, 25)
pw = ''.join([choice(seq) for i in xrange(pwl)])
>>> cyr_high = ''.join([chr(i) for i in xrange(ord('А'), ord('Я')+1)])
Отредактировано (Ноя. 23, 2009 13:04:47)
Офлайн