随机密码生成器保持生成相同的密码

时间:2014-11-27 19:05:20

标签: python python-3.x random

我必须编写一个使用Python生成随机密码(使用ASCII值和chr()函数)的程序,我已经让我的程序生成一个随机密码,但是当程序循环时,它会保持随机打印密码,我不知道如何解决它。如果有人能给我一些建议,那就太好了,因为我是python的新手

这是我到目前为止的代码:

import random, string

LNGTH=8
position=0
password=""
start=0
stop=0

while start==stop:
    input("would you like a password?")
    while position<LNGTH:
        x=random.randrange(9)
        character=chr(random.randrange(97, 97 + 26))
        choice=[str(x),character.upper(),character.lower()]
        pass_pos=random.choice(choice)
        password=password+pass_pos
        position+=1

    print(password)

4 个答案:

答案 0 :(得分:2)

您永远不会重置position,因此在生成第一个密码后,您的while循环始终返回True

因为您也没有重置password,这意味着您只生成一个随机密码并反复重新显示该值。

您需要重置内部外部while循环:

while start==stop:
    input("would you like a password?")
    position = 0
    password = ''

您可以在那里使用while True代替start == stop。您还可以使用for循环代替内部while循环,从而简化设置:

password = ''
for i in range(LNGTH):
    x=random.randrange(9)
    character=chr(random.randrange(97, 97 + 26))
    choice=[str(x),character.upper(),character.lower()]
    pass_pos=random.choice(choice)
    password=password+pass_pos

使用string.ascii_lettersstring.digits清除更多内容:

import string
import random

password_characters = string.ascii_letters + string.digits
length = 8

while True:
    if input("Would you like a password? ").lower() not in {'y', 'yes'}:
        break
    password = ''.join([random.choice(password_characters)
                        for _ in range(length)])
    print(password)

答案 1 :(得分:0)

完成循环后,position等于LNGTH,因此循环while position<LNGTH:将立即退出。

position设置回零并将password设置回外部循环内的""

答案 2 :(得分:0)

您的代码只生成一个密码并继续打印。这是因为它只运行一次循环while position < LNGTH:在循环内部,你增加位置,直到密码足够长。但是在下一次迭代中,position已经足够长了 - 所以while循环不会被输入;相反,将打印先前生成的密码。

在进入position循环之前,您必须将while重置为零。

答案 3 :(得分:-3)

此时你的程序每次都做同样的事情,所以如果不随机初始化,你每次都会得到相同的随机数。 你应该首先使用random.seed(),或者甚至更好地使用random.SystemRandom()(如果可用的话)。