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

时间:2019-05-15 00:15:01

标签: python string uppercase

我要用户输入密码。然后,程序确定密码是否满足特定条件。

这是有问题的部分。

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个大写字母。

2 个答案:

答案 0 :(得分:3)

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

如果要同时运行两项检查,请不要在其中使用elif

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

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

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

通过直接迭代String和多余的password

,我也摆脱了索引== True的需要

答案 1 :(得分:0)

您的逻辑是正确的,但是,您需要先检查一个字符是否为高位,然后再将其为alpha。这是因为每个高位字符都是字母,所以最后一个省略号将永远不会到达。因此,将代码位置更改为此:

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()和isupper()返回True或False,因此您无需检查它是True还是False(不需要==运算符),只需将其放入if语句中即可。 / p>