Задать вопрос
@Emince

Почему условие выполняется не корректно?

Требуется написать проверку вводимого пароля на количество символов (не менее 8), не менее 3-х цифр, не менее одной заглавной буквы. Слепил то, что ниже. Но условия вместе не выполняются, выполняется каждое по отдельности, как будто and работает как or. Не могу понять, где ошибка.

def number_count(string):
    count = 0

    for ch in string:
        if ch.isdigit():
            count += 1
    return count


while 1:
    password = input('Придумайте пароль: ')
    if len(password) < 8 and number_count(password) < 3 and password.islower() == 1:
        print('Пароль ненадёжный. Попробуйте ещё раз.')
    else:
        print('Пароль надёжный.')
        break
  • Вопрос задан
  • 167 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@Emince Автор вопроса
Задачу решил, всем спасибо!

def number_count(string):
    count = 0

    for ch in string:
        if ch.isdigit():
            count += 1
    return count


alphabet = ''.join([chr(i) for i in range(ord('А'), ord('Я') + 1)] + \
           [chr(i) for i in range(ord('а'), ord('я') + 1)])


while 1:
    ru_count = 0
    password = input('Придумайте пароль: ')
    for chr in password:
        for smb in alphabet:
            if smb == chr:
                ru_count += 1
    if ru_count > 0:
        print('Допускается ввод только латинских букв')
    else:
        if number_count(password) < 3 or password.islower() == 1 or password.isdigit() == 1 or len(password) < 8:
            print('Пароль ненадёжный. Попробуйте ещё раз.')
        else:
            print('Пароль надёжный.')
            break
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
neuotq
@neuotq
Прокрастинация
Вы в условии используете оператор and который будет false если хотя бы одно из условий неверно.

Поэтому меняйте его на or, те хотя бы одно из этих условий true, должен туда заходит. А иначе, если хотя бы одно false, то условие уйдёт в пароль надёжный.

if (len(password) < 8) or (number_count(password) < 3) or (password.islower() == 1):
Ответ написан
Maksim_64
@Maksim_64
Data Analyst
while True:
    password = input('Придумайте пароль: ')
    crit1 = len(password) >= 8
    crit2 = sum(s.isnumeric() for s in password) >=3
    crit3 = sum(s.isupper() for s in password) >=1

    if not (crit1 & crit2 & crit3):
        print('Вы ввели не надежный пароль')
    else:
        print('Пароль надежный')
        break
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы