Почему моя программа не распознает заглавные буквы? - PullRequest
2 голосов
/ 15 мая 2019

Я прошу пользователя ввести пароль. Затем программа определяет, является ли пароль действительным, соответствует ли он определенным критериям.

Вот этот раздел.

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 заглавных букв.

Ответы [ 2 ]

3 голосов
/ 15 мая 2019

Если 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, выполняя прямую итерацию String и избыточный == True

0 голосов
/ 15 мая 2019

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

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.

...