我必须编写一个使用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)
答案 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_letters
和string.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()(如果可用的话)。