Я не понимаю, почему программа пару раз повторяет код при его отображении
current_users = ['jaden', 'dan', 'kolya', 'mitya', 'admin']
new_users = ['roma', 'dan', 'timur', 'kolya', 'yulian']
for current_user in current_users:
for new_user in new_users:
if new_user in current_users:
if new_user.lower() == current_user.lower():
print(f'имя {new_user} использовалось, выберите другое имя')
else:
print(f"имя {current_user} доступно для регистрации")
Ответы (1 шт):
Автор решения: mrgervant
→ Ссылка
Проблема в том, что Вы основным циклом для проверки занятости имени нового пользователя проходитесь по списку старых пользователей и внутри каждой итерации вложенным циклом по списку новых пользователей (5 x 5 = 25 итераций). Хотя достаточно одного цикла по списку новых пользователей с сравнением на вхождение через in
.
Если Вам нужно ещё и для проверки приводить старые имена в нижний регистр, при этом не меняя исходный список, то можно создать множество с помощью функции map
и проверять с ней:
current_users = ['jaden', 'dan', 'kolya', 'mitya', 'admin']
new_users = ['roma', 'dan', 'timur', 'kolya', 'yulian']
occupied_names = set(map(str.lower, current_users))
for new_user in new_users:
new_user = new_user.lower()
if new_user in occupied_names:
print(f'Имя {new_user} использовалось, выберите другое имя')
else:
print(f"Имя {new_user} доступно для регистрации")
Множество можно сформировать генератором коллекции:
occupied_names = {user.lower() for user in current_users}
По примечанию от @CrazyElf list заменен на set: list, set или генератор?