Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的程序不检测大写字符?_Python_String_Uppercase - Fatal编程技术网

Python 为什么我的程序不检测大写字符?

Python 为什么我的程序不检测大写字符?,python,string,uppercase,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+=

我要求用户输入密码。然后,如果密码符合某些条件,程序将确定密码是否有效

这是有问题的部分

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

通过直接迭代字符串,我还消除了索引
密码的需要,并且冗余的
==True

您的逻辑是正确的,但是,您需要先检查字符是否高于alpha。因为上面的每个字符都是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()和isupper()返回True或False,您不需要检查它是True还是False(不需要==运算符),只需将其放入if语句中即可。

第二个条件可以是elif。第三个应该嵌套在it@MadPhysicist好电话。我想性能并不重要,但它更正确。