如何根据用户的输入创建多个密码生成器?



这就是我近三个小时要做的事情。无论我尝试什么,它都只打印一个密码。我希望它生成的密码数量等于用户输入的password_number这是另一种语言,对不起。

import random
simboli = ['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', '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', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', ']', '^', '_', '`', '{', '|', '}', '~']
character_number = int(input('Izaberi duzinu lozinke (najbolje od 8 do 32)  '))
password_number = int(input('Koliko razlicitih lozinki hoces?  '))
password = ''
while password_number == broj_lozinki:
for x in range(character_number):
password = password + random.choice(simboli)
if len(password) == character_number:
print(password)

您不断在现有密码的末尾添加更多字符,因此在打印出第一个密码后,您的密码太长,因此无法打印。

要解决此问题,请将password的初始化转移到外循环中。

for _ in range(password_number):    # the outer loop can be a for loop
password = ""                   # initialize password to an empty string
for _ in range(character_number):
password += random.choice(simboli)   # build up the password
print(password)     # no need for a length check, just print in the outer loop

我还做了一些额外的更改,比如将外循环设置为for,而不是while(您发布的代码没有正确管理(,并将print调用从内循环(用if保护(移动到外循环,在那里它只会在内循环完成后运行。

您可以通过在对str.join:"".join([random.choice(simboli) for _ in range(character_number)])的调用中使用列表理解来替换每次手动构建一个字符的密码的内部循环来进一步改进。使用join方法将一系列字符串组合成一个更大的字符串通常比使用+重复连接更有效,尽管使用+=有一个特殊情况,这意味着即使是从幼稚的代码中也不会总是得到糟糕的性能(这是我在上面的代码中做的另一个小更改(。

如果我正确理解您的问题,您将尝试创建一个可变数量的密码,其中每个密码的长度都是可变的。

我在您的代码中看到的主要问题是,在while循环中,您不会更新任何内容。

下面,我们运行一个循环n次,其中n是要生成的密码数。然后,我们有一个列表理解,它选择随机字符x次,其中x是字符数。

from random import choice
character_num = int(input("Enter character number: "))
password_num = int(input("Enter password number: "))
passwords = []
for _ in range(password_num):
pswd = [choice(simboli) for _ in range(character_num)]
passwords.append("".join(pswd))

输出(character_num = 20password_num = 10(:

[
"o_1z#;=}'tTE_HXqy+Zq",
"?u6$E|rS;_}MPO7-67jt",
"SN2$l{jM(g&F3#DP!JMS",
"Ts5%J/!A4@=:w-hc&?:#",
"T}l,qR5oUHvO91(i}bI"",
"g=4DwnPM!rM]:VBkbGQy",
"/2+r1:K85-:oC.B87l~U",
"]G1mRq8OER.?cR3e*5#@",
"VU#AIH<;P_rc~E}y%YZ_",
"TBcG&F=[BEbT0_p|Z50E"
]

最新更新