为什么我的for循环不检查每个字符?

时间:2017-10-07 20:29:26

标签: python for-loop password-checker

所以我在python上有点初学者,我不能为我的生活找出为什么它不会检查并添加每个字母

def howstrong (password):
    points = len(password)
    charactersallowed = ["!", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+"]

    for ch in password:
        if ch.isupper():
            points= points+5
        elif ch.islower():
            points = points+5
        elif ch.isdigit():
            points = points+5
        elif ch in charactersallowed:
            points= points+5
        else:
            points = points+0
        return points

如果输入密码密码!在我的代码中,它告诉我我的积分是14但是这个密码应该是24?下面我将添加我的其余代码,但我怀疑它在那个部分,我相信我的for循环中有错误。

def checkingmain():

    while 1:
        p = input("\nEnter password: ")
        if len(p) < 8 or len(p) > 24:
            print("Password must be 6 to 12 characters.")
        elif input("Re-enter password: ") != p:
            print("Passwords did not match. Please try again.")

        else:
            score= howstrong(p)
            if not score:
                print("Invalid character detected. Please try again.")

            else:
                if score <= 0:
                    print("your password is weak",score)
                elif score>0 and score<20:
                    print("your password is medium",score)
                else:
                    print("your password is strong",score)
            break

我很感激,如果有人能用一个可以理解的解决方案回到我身边,对于一个有点蟒蛇初学者的人来说。

3 个答案:

答案 0 :(得分:5)

它只检查第一个字符,因为你在循环内部返回。将return语句移回一个缩进,因此它不在for循环中。

答案 1 :(得分:1)

由于你在循环中有你的return语句,它只能在从函数返回之前运行循环一次。如果将return语句移回一个选项卡,它应该可以工作

答案 2 :(得分:0)

return语句在for循环中,所以当你的程序第一次到达for循环的末尾时,它只是从函数返回,所以你的for循环终止了。如下所示,您的代码稍有改动就会对您有所帮助。

for ch in password:
    if ch.isupper():
        points= points+5
    elif ch.islower():
        points = points+5
    elif ch.isdigit():
        points = points+5
    elif ch in charactersallowed:
        points= points+5
    else:
        points = points+0
return points

希望它有所帮助!