Неверно работает условие или цикл
Помогите найти ошибку. Задание: Создайте цикл проверки введенных пользователем логина и пароля на соответствие следующим установленным правилам:
Логин должен содержать ровно две заглавные буквы и состоять минимум из 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 шт):
Вы не обнуляете 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("К сожалению, условия не выполнены, попробуйте еще раз")