为什么我的程序没有检测到大写字符?

Why is my program not detecting uppercase characters?

我要求用户输入密码。然后程序确定密码是否符合特定条件是否有效。

这是有问题的部分。

for i in range(0, len(password)):
    if(password[i].isdigit()==True):
        isNum+=1
    elif (password[i].isalpha()==True):
        isLetter+=1
    elif (password[i].isupper()==True):
        isUpper+=1

我的程序可以很好地检测数字和字母,但不能检测大写字母。如果我输入密码1234Foxes,它会说有4个字母,4个数字,总共8个字符,但它说有0个大写字母。

如果 isupper 为真,则 isalpha 一定为真,因为大写字母必然是字母。由于您使用的是 elif,条件是互斥的,一旦 isalpha 检查为真,检查就会停止。

如果你想要两个检查都不要使用 elif 运行:

for character in password:
    if(character.isdigit()):
        isNum += 1

    elif (character.isalpha()):
        isLetter += 1

        if (character.isupper()):
            isUpper += 1

我还通过直接迭代字符串摆脱了索引password的需要,以及多余的== True

你的逻辑是正确的,但是,如果一个字符是 alpha,你需要先检查它是否是 upper。这是因为每个上层字符都是 alpha,所以永远不会到达最后一个 elif。因此,将您的代码位置更改为:

for i in range(0, len(password)):
   if(password[i].isdigit()==True):
       isNum+=1
   # isupper() first from isalpha()
   elif (password[i].isupper()==True):
       isUpper+=1
   elif (password[i].isalpha()==True):
       isLetter+=1

还有一个提示:您可以在不使用索引的情况下遍历字符串的每个字符,如下所示:

for char in password:
   if (char.isdigit()):
       isNum += 1
   elif (char.isupper()):
       isUpper += 1
   elif (char.isalpha()):
       isLetter += 1

因为isdigit(), isalpha() and isupper() returns True or False,你不需要检查它是True还是False(不需要==运算符),只要把它进入 if 语句。