我已经制作了一个应该要求您输入密码的程序,并检查它是否符合某些要求,如果它没有达到要求,它会要求您提供另一个密码。我尝试通过一个范围设置为3的循环重新询问它。它有点工作,但有点没有。如果你第一次说得对,那么密码是有效的。"而不是再问你。但如果你第一次弄错了,它会再次询问,但无论你输入什么,它都会出现与第一次相同的错误信息。
minlength = (8)
errors = list()
i = 0
for i in range(3):
pw = str(input("Insert new password."))
num = sum(1 for c in pw if c.isnumeric())
alpha = sum(1 for c in pw if c.isalpha())
if len(pw) < minlength:
errors.append("Not enough characters")
if alpha < 1:
errors.append("At least on letter is needed")
if num < 1:
errors.append("At least one number is needed")
if pw.isalnum() == False:
errors.append("Must be alphanumeric")
if not errors:
print("Password is valid")
break
else:
print("Password is invalid")
for err in errors:
print(err)
break
如果您输入不同的内容,我需要一种方法使其不输出相同的错误消息。
答案 0 :(得分:0)
您需要在循环开头清空errors
列表,或者让它成为循环内部声明的局部变量,如:
for i in range(3):
errors = list()
...
由于您的代码是当前编写的,当存在错误时,元素会在循环的第一次迭代中插入到此列表中,并且它们会无限期地保留在那里,即使在后续迭代中也是如此。
答案 1 :(得分:0)
问题是你只声明errors
数组一次(在循环之前)并重复添加它。您可以通过正确确定errors
变量的范围来解决问题 - 在errors = list()
循环中移动for
行。