Неверно работает условие или цикл

Помогите найти ошибку. Задание: Создайте цикл проверки введенных пользователем логина и пароля на соответствие следующим установленным правилам:

  • Логин должен содержать ровно две заглавные буквы и состоять минимум из 6 символов.

  • Пароль должен содержать ровно одну заглавную букву, хотя бы одну цифру и состоять минимум из 8 символов.

Если логин / пароль соответствует требованиям, должно выводиться сообщение: "Логин соответствует условиям регистрации" / "Пароль соответствует условиям регистрации". В противном случае выводится сообщение "Логин не соответствует условиям регистрации" или "Пароль не соответствует условиям регистрации" соответственно для логина и пароля.

Если и логин, и пароль правильные, то выводится фраза "Вы успешно зарегистрированы! Добро пожаловать в MangoFM". Цикл завершается. В ином случае на экране пишется "К сожалению, условия не выполнены, попробуйте еще раз" и у пользователя снова запрашивают логин и пароль. Мой код:

login = input("Введите логин: ")
password = input("Введите пароль: ")

while True:
    uppercase_letters = 0
    digits = 0
    if len(login) >= 6:
        for char in login:
            if char.isupper():
                uppercase_letters += 1
        if uppercase_letters == 2:
            print("Логин соответствует условиям регистрации")
        else:
            print("Логин не соответствует условиям регистрации")
    else:
        print("Логин не соответствует условиям регистрации")
    if len(password) >= 8:
        for char in password:
            if char.isupper():
                uppercase_letters += 1
            elif char.isdigit():
                digits += 1
        if uppercase_letters == 1 and digits >= 1:
            print("Пароль соответствует условиям регистрации")
            print("Вы успешно зарегистрированы! Добро пожаловать в MangoFM")
            break
        else:
            print("Пароль не соответствует условиям регистрации")
    else:
        print("Пароль не соответствует условиям регистрации")

    print("К сожалению, условия не выполнены, попробуйте еще раз")

Не проходит проверка именно пароля по условиям задачи. Где ошибка?

Новый код:

def check_login(login):
    uppercase_letters = 0
    if len(login) >= 6:
        for char in login:
            if char.isupper():
                uppercase_letters += 1
        if uppercase_letters == 2:
            print("Логин соответствует условиям регистрации")
            return True
        else:
            print("Логин не соответствует условиям регистрации")
    else:
        print("Логин не соответствует условиям регистрации")
        return False

def check_password(password):
    uppercase_letters = 0
    digits = 0
    if len(password) >= 8:
        for char in password:
            if char.isupper():
                uppercase_letters += 1
            elif char.isdigit():
                digits += 1
        if uppercase_letters == 1 and digits >= 1:
            print("Пароль соответствует условиям регистрации")
            return True
        else:
            print("Пароль не соответствует условиям регистрации")
            return False
    else:
        print("Пароль не соответствует условиям регистрации")
    return False

while True:
    login = input("Введите логин: ")
    password = input("Введите пароль: ")

    if check_login(login) and check_password(password):
        print("Вы успешно зарегистрированы! Добро пожаловать в MangoFM")
        break
    else:
        print("К сожалению, условия не выполнены, попробуйте еще раз")

В новом коде не выводится запись про неверный пароль. Например, логин верный, а пароль нет. На выводе получается "Логин не соответствует условиям регистрации" и "К сожалению, условия не выполнены, попробуйте еще раз". Ошибка в отрезке кода, где идет проверка пароля, если он равен или более 8 символов. Если пароль не подходит под это условие, то выводится сообщение о его неверном вводе. Почему про пароль нет вывода?


Ответы (1 шт):

Автор решения: MBo

Вы не обнуляете uppercase_letters перед обработкой пароля

Для того, чтобы при плохом логине и хорошем пароле не было сообщения об успешной регистрации, можно добавить continue после двух сообщений print("Логин не соответствует условиям регистрации").

Кроме того, по логике ввод логина и пароля нужно внести внутрь цикла while, в начало

while True:
    login = input("Введите логин: ")
    password = input("Введите пароль: ")
    uppercase_letters = 0
    digits = 0
    if len(login) >= 6:
        for char in login:
            if char.isupper():
                uppercase_letters += 1
        if uppercase_letters == 2:
            print("Логин соответствует условиям регистрации")
        else:
            print("Логин не соответствует условиям регистрации")
            continue
    else:
        print("Логин не соответствует условиям регистрации")
        continue
    uppercase_letters = 0
    if len(password) >= 8:
        for char in password:
            if char.isupper():
                uppercase_letters += 1
            elif char.isdigit():
                digits += 1
        if uppercase_letters == 1 and digits >= 1:
            print("Пароль соответствует условиям регистрации")
            print("Вы успешно зарегистрированы! Добро пожаловать в MangoFM")
            break
        else:
            print("Пароль не соответствует условиям регистрации")
    else:
        print("Пароль не соответствует условиям регистрации")

    print("К сожалению, условия не выполнены, попробуйте еще раз")
→ Ссылка