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好电话。我想性能并不重要,但它更正确。