2008-12-15 4 views

Antwort

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: mochte die Idee von random.choice besser als randint() verwendet, so ich habe den Code aktualisiert das widerspiegeln.

Hinweis: Dies setzt Klein- und Großbuchstaben voraus. Wenn nur dann Kleinbuchstaben die zweite Liste Verständnis lesen ändern:

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

Offensichtlich für Groß nur können Sie nur, dass um Flip so die Scheibe ist [26:] statt umgekehrt.

+0

Nizza Antwort! (Ich hatte noch nie zuvor random.choice vorher gesehen.) –

+0

Behalten Sie die Rezepte als Lesezeichen - http://code.activestate.com/recipes/ – gimel

+1

Wahrscheinlich besser lesbar, um string.lowercase und string.uppercase zu verwenden als die Liste zu schneiden. Auch die Lösung gilt nur, wenn das OP nur mit ASCII-Zeichen zufrieden ist, wenn er Strings aus dem ganzen Unicode-Zeichensatz erzeugen will, wird das Problem viel schwieriger. –

13

Siehe ein Beispiel - Recipe 59873: Random Password Generation.

Aufbauend auf dem Rezept, hier ist eine Lösung auf Ihre Frage:

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 ist eine alternative Wahl. Der Unterschied, wie in der python.org documentation gefunden werden kann, ist, dass random.sample Proben ohne Ersatz. Somit würde random.sample(string.letters, 53) zu einem ValueError führen. Dann, wenn Sie generieren Ihre zufällige Zeichenfolge aus acht Ziffern und fünfzehn Zeichen wollten, würden Sie schreiben

import random, string 

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

Hier ist eine einfachere Version:

import random 
import string 

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