2017-09-29 34 views
0

我试图创建一个密码生成器。我列出了包含所有数字和字母的列表。我试图将所有列表添加到一个大列表中,然后从每个位置的随机列表中随机选择一个。从列表中随机挑选列表内容

def generator(): 
    password=['','','','','','','','','','',''] 
    symbols=['£','$','%','^','&','*','_'] 
    numbers=[0,1,2,3,4,5,6,7,8,9] 
    letter=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] 
    Uletter=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] 
    password[0]=random.choice(numbers) 
    password[1]=random.choice(numbers) 
    password[2]=random.choice(numbers) 
    password[3]=random.choice(numbers) 
    password[4]=random.choice(numbers) 
    password[5]=random.choice(numbers) 
    password[6]=random.choice(numbers) 
    password[7]=random.choice(numbers) 
    password[8]=random.choice(numbers) 
    password[9]=random.choice(numbers) 
    password[10]=random.choice(numbers) 
    print(password) 

我知道我有random.choice(数字)每个插槽但这仅仅是为节省时间,现在,直到我得到发电机工作的缘故。

+0

我假设你是一个新的开发人员,所以最好的建议是,这不是生成字符串的方式。请阅读以下答案以获得更专业的解决方案:https://stackoverflow.com/a/2257449/3767514 – Yarimi

+1

我是新手,我知道如何生成随机字符串和整数。我想将所有列表添加到一个大列表中的原因是,每个插槽不必是数字或整数。如果我这样做,密码很容易预测,因为每个插槽是数字,字母或符号。如果我使每个插槽都是纯粹随机的,那么对于插槽是数字,字母还是符号,没有真正的模式。我知道有更好的方式来做到这一点,我只是想以简单的方式完成它。 –

+1

_“我想将所有列表添加到一个大列表中”。这似乎是一个好主意。然后你可以使用'choice'从列表清单中得到一个列表,并且你可以再次使用'choice'来获得一个字符。继续尝试这种方法。 – Kevin

回答

0
all_chars = symbols + numbers + letter + Uletter 
password = ''.join(str(random.choice(all_chars)) for i in range(11)) 

请注意,您必须包括str()因为numbers元素是整数,而不是字符串。

0

我通常用@Kerricks答案去,但向你展示一些其他的,稍长,选项:

import random 
import string 

numbers = [str(x) for x in range(10)] 
lower_case_letters = [x for x in string.lowercase] 
upper_case_letters = [x for x in string.uppercase] 
symbols = ['$', '%', '^', '&', '*', '_'] 

all_chars = numbers + lower_case_letters + upper_case_letters + symbols 

password = '' 

for x in range(11): 
    password += random.choice(all_chars) 

print(password) 

这表明如何生成号的列表,转换为字符串。如何使用strings库获取大写和小写字母,如何连接列表以及如何使用random.choice从完整的all_chars列表中选择一个随机选项。 HTH。

哦,顺便说一下:不要在现实生活中生成这样的密码。请。

+0

正如我在问题评论中提到的那样,'random.choice'会很乐意接受一个字符串作为它的arg,所以你不需要费心建立这些列表。但是当你想从一个字符串的字符构建一个列表时,不需要使用循环,只需将该字符串传递给'list'构造函数,例如'list(string.ascii_letters)' –