【问题标题】:Python- Why does it say password denied even when I enter a password that should work?Python-为什么即使我输入了应该可以使用的密码,它也会说密码被拒绝?
【发布时间】:2020-06-01 01:14:48
【问题描述】:

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

【问题讨论】:

  • 因为你的if/else 语句应该在循环之外

标签: python for-loop if-statement input passwords


【解决方案1】:

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

您的循环的第一个值是来自Py11P。当它进入第二个 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")

【讨论】:

    【解决方案2】:

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

    对于第一个循环,您将使用字母“h” 如果它是上层(不是)你的 else 你被执行运行密码被拒绝部分(这就是问题)

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

    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)
    

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

    【讨论】:

      猜你喜欢
      • 2020-07-21
      • 2015-07-28
      • 1970-01-01
      • 2020-12-27
      • 2012-04-23
      • 2020-11-11
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多