我要用户输入密码。然后,程序确定密码是否满足特定条件。
这是有问题的部分。
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个大写字母。
答案 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>