2008-12-15 17 views

Trả lời

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: thích ý tưởng sử dụng random.choice tốt hơn so với randint() vì vậy tôi đã cập nhật các mã để phản ánh điều đó.

Lưu ý: điều này giả định các ký tự chữ thường và chữ hoa là mong muốn. Nếu chữ thường chỉ sau đó thay đổi danh sách hiểu thứ hai để đọc:

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

Rõ ràng cho hoa duy nhất bạn có thể chỉ cần lật rằng xung quanh để lát là [26:] thay vì cách khác xung quanh.

+0

Nice câu trả lời! (Tôi chưa bao giờ thấy ngẫu nhiên. Trước đây.) –

+0

Giữ các công thức làm dấu trang - http://code.activestate.com/recipes/ – gimel

+1

Có lẽ dễ đọc hơn khi sử dụng string.lowercase và string.uppercase hơn là cắt danh sách. Ngoài ra các giải pháp chỉ giữ nếu OP là hài lòng với chỉ ký tự ASCII, nếu anh ta muốn tạo ra các chuỗi từ toàn bộ ký tự unicode đặt vấn đề trở nên khó khăn hơn nhiều. –

13

Xem ví dụ - Recipe 59873: Random Password Generation.

xây dựng trên công thức nấu ăn, đây là một giải pháp cho câu hỏi của bạn:

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 là lựa chọn thay thế. Sự khác biệt, như có thể được tìm thấy trong các python.org documentation, là random.sample mẫu mà không cần thay thế. Do đó, random.sample(string.letters, 53) sẽ dẫn đến một số ValueError. Sau đó, nếu bạn muốn để tạo chuỗi ngẫu nhiên của bạn trong tám chữ số và mười lăm ký tự, bạn sẽ viết

import random, string 

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

Dưới đây là một phiên bản đơn giản:

import random 
import string 

digits = "".join([random.choice(string.digits+string.letters) for i in xrange(10)]) 
print digits 
Các vấn đề liên quan