Вчера мы опубликовали пятую задачу на поиск ошибки в коде. Верное решение в комментариях написал Oleg Malakhov.

Код задачи:

user_input = "login password"
user_input = user_input.split()
password, login = user_input.pop(), user_input

credentials = {login: password}

print(credentials)

Разбор задачи. Создаём переменную user_input, в которую помещаем строку "login password".

Затем в переменную user_input при помощи строкового метода .split() помещаем список из двух строк ["login", "password"].

Далее в две переменные password и login помещаем следующее:

  • В переменную password помещаем результат работы метода .pop(), удаляющего и возвращающего последний элемент списка.
  • В переменную login помещаем то, что находится в переменной user_input, а именно список с единственным элементом - ["login"]

После этого создаём переменную credentials и инициализируем в ней словарь, используя переменные login и password в качестве ключа и значения, соотвественно.

В конце вызываем функцию print(), которой распечатываем словарь из переменной credentials.

Почему ошибка? Ошибка заключается в передаче списка в качестве ключа для словаря. Ключом словаря может быть только хешируемые типы данных. Подробнее об этом рассказано в разборе 7-й задачи.

Как можно исправить? Исправить можно двумя способами:

Первый способ — это распаковать список с одним элементом в переменную:

password, login = user_input.pop(), *user_input

Не самый лучший, поскольку в списке может быть больше одного элемента, в таком случае питон не найдёт переменную для распаковки и выдаст другую ошибку.

Второй способ — это явно указать на то, что нам нужен первый(нулевой) элемент:

password, login = user_input.pop(), user_input[0]

В таком случае гарантированно вернётся первый элемент из списка, а будет он тем, который нужен или нет, — это уже другой вопрос.