ваша логика верна, но вам нужно проверить, является ли символ выше, если он альфа.Это потому, что каждый верхний символ - альфа, поэтому последний элиф никогда не будет достигнут.Итак, измените свою позицию кода следующим образом:
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.