为什么我的程序没有检测到大写字符?
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 语句。
我要求用户输入密码。然后程序确定密码是否符合特定条件是否有效。
这是有问题的部分。
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 语句。