Как проверить строку на наличие требований БЕЗ регулярного выражения в python? - PullRequest
1 голос
/ 18 марта 2020

Мне нужно создать программу, которая проверяет ввод (пароль) со следующими требованиями:

  • длиной не менее 8 символов
  • содержит как минимум одну строчную букву буква
  • содержит хотя бы одну заглавную букву
  • содержит хотя бы одно число

Оно должно возвращать false, если какое-либо из требований не выполнено.

Пока я сделал следующее только для первого требования.

def check_password(pword):
   if len(pword) < 8:
       return False
   for i in pword:
       if pword[i].isUpper():
           print(True)
   return True

Я не знаю, как реализовать другие требования без использования регулярных выражений.

Ответы [ 2 ]

5 голосов
/ 18 марта 2020

Оператор any возвращает True, если в вашей строке есть хотя бы одно совпадение, в этом случае требуется один верхний регистр, строчные буквы и символы ди git. Тогда оператор all возвращает True, только если выполнены все условия.

def check_password(pword):
    return all([
        len(pword) >= 8,
        any(letter.isupper() for letter in pword),
        any(letter.islower() for letter in pword),
        any(letter.isdecimal() for letter in pword) 
    ])

check_password('a4R') # False
check_password('abcdefgh') # False
check_password('12345678') # False
check_password('ABCDEFGH') # False
check_password('abcDEFGH') # False
check_password('abc45678') # False
check_password('ABC45678') # False
check_password('abcDEF7')  # False
check_password('abcDEF78') # True
check_password('abc12345')  # False
2 голосов
/ 18 марта 2020

Вы можете использовать простые if операторы, спрашивающие, что вы хотите, например:

def check_password(pword):
    if not len(pword) >= 8:
        return False
    elif not any(char.islower() for char in pword):
        return False
    elif not any(char.isupper() for char in pword):
        return False
    elif not any(char.isdigit() for char in pword):
        return False
    else:
        return True

print(check_password(''))  # False
print(check_password('HELLOOOOOO'))  # False
print(check_password('abc12345'))  # False
print(check_password('Helllooooo'))  # False
print(check_password('Hello12345'))  # True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...