Python- 为什么即使我输入了应该有效的密码,它仍然说密码被拒绝?

Python- Why does it say password denied even when I enter a password that should work?


userpass= input('Enter a password with at least one uppercase letter, one lowercase letter, and one number: ')
uppercounter=0
lowercounter=0
numbercounter=0
for i in range(len(userpass)):


    if userpass[i].isupper():
        uppercounter=uppercounter+1
        print(uppercounter)
        if uppercounter > 0:
            print("working")
    else:
        print('Password Denied')
        raise SystemExit(0)

    if userpass[i].islower():
        lowercounter=lowercounter+1
        print(lowercounter)
        if lowercounter > 0:
            print('working')
    else:
        print('Password Denied')
        raise SystemExit(0)

    if userpass[i].isnumeric():
        numbercounter=numbercounter+1
        print(numbercounter)
        if numbercounter > 0:
            print("working")
            print("Password Accepted")
    else:
        print('Password Denied')
        raise SystemExit(0)

我正在尝试编写一个必须包含一个大写字母、一个小写字母和一个数字的密码程序。但是 if 语句似乎无法正常工作,每当我输入“Py11”之类的密码时,它都会显示密码被拒绝。

对于您要再次检查所有三个条件的密码的每个字符: 假设您输入了:"hi"

对于第一个循环,您将在字母 "h" 如果它是上层(不是)你的其他人你将被执行 运行 密码被拒绝部分(这就是问题所在)

为了完成您想要的,我建议您这样检查:

if condition1:
    pass #add here the counting you are making
elif condition2:
    pass #add here the counting you are making
elif condition3:
    pass #add here the counting you are making
# [...]
else:
    print("password denied")

对于检查上、下、数字的条件,如果你想允许特殊字符,你也需要检查它们

您可以采用其他方式:

userpass= input('Enter a password with at least one uppercase letter, one lowercase letter, and one number: ')
uppercounter=0
lowercounter=0
numbercounter=0
for i in range(len(userpass)):
    if userpass[i].isupper():
        uppercounter=uppercounter+1
    if userpass[i].islower():
        lowercounter=lowercounter+1
    if userpass[i].isnumeric():
        numbercounter=numbercounter+1
if uppercounter == 0 or lowercounter == 0 or numbercounter == 0:
    print("Password denied")
    raise SystemExit(0)

这样你就不必检查其他特殊字符

因为你的逻辑不对。 所以首先,您要输入 Py11 密码,然后它会进入第一个 if 语句。

您的循环采用的第一个值是 Py11 中的 P。到第二个if语句的时候,马上就到第二个if语句的else语句,因为值还是P.

我尽量不对你的代码做太多修改,但你可以这样试试:

userpass = input(
    'Enter a password with at least one uppercase letter, one lowercase letter, and one number: ')
uppercounter = 0
lowercounter = 0
numbercounter = 0
for i in range(len(userpass)):
    print(userpass[i])
    if userpass[i].isupper():
        uppercounter = uppercounter+1
        print(uppercounter)
        if uppercounter > 0:
            print("working")
    elif userpass[i].islower():
        lowercounter = lowercounter+1
        print(lowercounter)
        if lowercounter > 0:
            print('working')
    elif userpass[i].isnumeric():
        numbercounter = numbercounter+1
        print(numbercounter)
        if numbercounter > 0:
            print("working")

if uppercounter <= 0 or lowercounter <= 0 or numbercounter <= 0:
    print('Password Denied')
    raise SystemExit(0)
else:
    print("Password Accepted")