2009-12-24 16 views
15

thể trùng lặp:
python random string generation with upper case letters and digitsLàm cách nào để tạo một chuỗi ngẫu nhiên (chỉ có độ dài X, a-z) bằng Python?

Làm thế nào để tạo ra một chuỗi có độ dài X một-z bằng Python?

+0

@ S.Lott Tôi không hiểu, đó có phải là những gì Stack Overflow về cơ bản không? Có vẻ như một điều kỳ lạ khi phàn nàn trên một trang web trợ giúp. – Simon

Trả lời

42
''.join(random.choice(string.lowercase) for x in range(X)) 
+2

Sử dụng tốt biểu thức trình tạo. Nhưng trong khi chúng tôi đang tiết kiệm bộ nhớ, cũng có thể sử dụng xrange thay vì phạm vi. –

+3

CytokineStorm, như của Python 3.x, 'range()' hoạt động giống như 'xrange()'. –

+0

Chỉ cần nhớ rằng mọi chuỗi được tạo bởi mô-đun ngẫu nhiên là * không * bảo mật mã hóa. – Federico

20

Nếu bạn muốn không lặp lại:

import string, random 
''.join(random.sample(string.ascii_lowercase, X)) 

Nếu bạn muốn (tiềm năng) lặp đi lặp lại:

import string, random 
''.join(random.choice(string.ascii_lowercase) for _ in xrange(X))) 

Đó là giả định rằng bởi a-z bạn có nghĩa là "ký tự ASCII chữ thường", nếu không bảng chữ cái của bạn có thể được thể hiện khác nhau trong các biểu thức này (ví dụ: string.lowercase cho "chữ cái thường phụ thuộc miền địa phương" có thể bao gồm dấu trọng âm hoặc cách khác d chữ thường được viết hoa tùy thuộc vào ngôn ngữ hiện tại của bạn).

+0

FYI, 'string.lowercase' hiếm khi hơn ASCII tuy nhiên bạn đặt ngôn ngữ theo kinh nghiệm của tôi. Tôi chỉ cần lưu ý rằng không có biến số thực sự cho "bảng chữ cái hiện tại". – u0b34a0f6ae

+0

Cả hai mẫu mã này đều hàm ý tính duy nhất. Đây là một thử nghiệm: http://pastie.org/8619409 – Altaisoft

+0

@Altaisoft: Bạn hiểu nhầm cách 'mẫu' hoạt động. Nó chỉ vẽ bất kỳ nhân vật nào một lần, nhưng nó không vẽ theo thứ tự. Vì vậy, 'abc' và' cba' sẽ là các đầu ra khác nhau. Thử nghiệm của bạn chỉ hợp lệ (có thể dự kiến ​​nhiều chồng chéo) nếu bạn giả sử 'mẫu' trả về chúng theo cùng thứ tự chúng xuất hiện trong chuỗi gốc, nhưng vì chúng có thể xuất hiện theo thứ tự bất kỳ, có' (26 + 7) !/7! 'Tùy chọn; trùng lặp sẽ không phổ biến. – ShadowRanger

Các vấn đề liên quan