我的循环不能正常工作

时间:2015-03-05 13:51:30

标签: python-3.x

我已经制作了一个应该要求您输入密码的程序,并检查它是否符合某些要求,如果它没有达到要求,它会要求您提供另一个密码。我尝试通过一个范围设置为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

如果您输入不同的内容,我需要一种方法使其不输出相同的错误消息。

2 个答案:

答案 0 :(得分:0)

您需要在循环开头清空errors列表,或者让它成为循环内部声明的局部变量,如:

for i in range(3):
    errors = list()
    ...

由于您的代码是当前编写的,当存在错误时,元素会在循环的第一次迭代中插入到此列表中,并且它们会无限期地保留在那里,即使在后续迭代中也是如此。

答案 1 :(得分:0)

问题是你只声明errors数组一次(在循环之前)并重复添加它。您可以通过正确确定errors变量的范围来解决问题 - 在errors = list()循环中移动for行。