Python为什么即使在我输入一个应该有效的密码时也会说密码被拒绝?

2024-06-03 11:11:56 发布

您现在位置:Python中文网/ 问答频道 /正文


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”这样的密码时,它就会说密码被拒绝


Tags: 密码ifpasswordoneelseworkingraiseprint
2条回答

因为你的逻辑是错误的。 首先,输入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")

对于密码的每个字符,您都要检查所有三个条件: 假设你输入了“嗨”

对于第一个循环,您将使用字母“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)

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

相关问题 更多 >