AttributeError: 'list' object has no attribute 'lower'

current_users = ['machina', 'bezbazarov', 'kocherginr', 'komap', 'qwerty', 'BezbazarovAA']

new_users = ['Bezbazarov', 'arnold', 'kingkong', 'komap', 'byxapecT']

for new_user in new_users:

    if new_user.lower() in current_users.lower():
        print (f'Извини, имя {new_user.title()}, занято. Выбери другое!')
    else:
        print (f'Имя {new_user}, свободно. Добро пожаловать!')

Необходимо, чтобы имена проверялись в обох списках по нижнему регистру. Если убираю .lower в current_users, то все работает, но проверка идет не верно...так как lower задействуется только для списка new_users


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

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

Метод .lower() доступен только для строк, а вы пытаетесь применить его к списку.

Как вариант, можно собрать множество с элементами в нижнем регистре и уже сравнивать с ним.

current_users = ['machina', 'bezbazarov', 'kocherginr', 'komap', 'qwerty', 'BezbazarovAA']

new_users = ['Bezbazarov', 'arnold', 'kingkong', 'komap', 'byxapecT']

# Собираем множество с именами в нижнем регистре
current_users_lower_set = {user.lower() for user in current_users}

for new_user in new_users:

    if new_user.lower() in current_users_lower_set:
        print (f'Извини, имя {new_user.title()}, занято. Выбери другое!')
    else:
        print (f'Имя {new_user}, свободно. Добро пожаловать!')

Вывод:

Извини, имя Bezbazarov, занято. Выбери другое!
Имя arnold, свободно. Добро пожаловать!
Имя kingkong, свободно. Добро пожаловать!
Извини, имя Komap, занято. Выбери другое!
Имя byxapecT, свободно. Добро пожаловать!
→ Ссылка