Распаковка кортежей

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

В этом модуле мы углубимся в работу с кортежами в Python и изучим мощный механизм — распаковку кортежей (Tuple Unpacking).

Распаковка позволяет присваивать элементы кортежа (или любого итерируемого объекта) отдельным переменным в одной строке кода. Это делает код лаконичным и читаемым. Вы узнаете:

  • Как быстро поменять значения переменных местами без временной переменной.
  • Как использовать оператор * (звездочка) для сбора "остальных" элементов в список.
  • Как работать с вложенными структурами данных.
  • Типичные ошибки при распаковке, такие как несоответствие количества переменных и элементов.

Выполните задания от простых к сложным, чтобы закрепить навык написания "pythonic" кода!

Список тем

Основы распаковки

id: 40015_task_unpack_1

Проанализируйте код. Мы создаем кортеж с координатами, а затем распаковываем его в три отдельные переменные. Какое значение будет выведено на экран?

Выберите правильный вариант ответа
coordinates = (10, 25, 88)
x, y, z = coordinates
print(y)
Сообщения
Проверить
Показать подсказку

Pythonic Way: Обмен значений

id: 40015_task_unpack_2

В Python можно поменять значения двух переменных местами в одну строку, используя распаковку кортежей. Заполните пропуски так, чтобы переменная a получила значение b, а b получила значение a.

Заполните пропуски
a = "Красный"
b = "Синий"

# Меняем местами
a, b = input1S, input2S

print(f"a: {a}, b: {b}")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Создание и распаковка

id: 40015_task_unpack_3

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

Расставьте строки в правильном порядке
print(f"Имя: {name}, Домен: {domain}")
name, domain = email_parts
email_parts = user_email.split('@')
user_email = "student@example.com"
Сообщения
Проверить
Показать подсказку

Ошибка: Too many values to unpack

id: 40015_task_unpack_4

Код вызывает ошибку ValueError, так как в кортеже 3 элемента, а переменных для приема всего две. Исправьте строку распаковки, добавив недостающую переменную blue, чтобы исправить ошибку.

Найдите ошибку и исправьте
colors = ('Red', 'Green', 'Blue')
red, green = colors
print(green)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сбор лишних элементов

id: 40015_task_unpack_5

Используйте оператор * (звездочка), чтобы собрать все оценки, кроме первой и последней, в отдельный список. Расставьте элементы из банка так, чтобы код работал корректно.

Нужно правильно расставить в пропуски предложенные варианты
scores = [10, 8, 9, 5, 10]
input1S, input2S, input3S = scores
print(middle)
first
*middle
last
middle
*last
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Валидный и невалидный синтаксис

id: 40015_task_unpack_6

Распределите примеры кода на две группы: корректная распаковка и код, который вызовет SyntaxError.

Перетяните элементы в соответствующие блоки
Корректно
Ошибка синтаксиса
a, *b, c = (1, 2, 3, 4)
*a, b = (1, 2, 3)
a, b = (1, 2)
*a, *b = (1, 2, 3)
a, *b, *c = (1, 2, 3, 4)
Сообщения
Проверить
Показать подсказку

Распаковка в цикле for

id: 40015_task_unpack_7

Соберите цикл, который проходит по словарю prices и распаковывает каждую пару (ключ, значение) для вывода. Используйте метод .items().

Перетяните в правильном порядке строки из одного блока в другой
print(f"{item}: {price}")
for item, price in prices.items():
prices = {'Apple': 10, 'Banana': 5}
for item, price in prices:
    print(f"{item}: {prices[item]}")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Что попадет в переменную со звездочкой?

id: 40015_task_unpack_8

Сопоставьте код распаковки слева с тем значением, которое окажется в переменной rest (список с остальными элементами). Исходный кортеж всегда: (1, 2, 3, 4, 5).

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
[2, 3, 4, 5]
[1, 2, 3, 4]
[3]
[]
a, *rest = (1, 2, 3, 4, 5)
*rest, z = (1, 2, 3, 4, 5)
a, b, *rest, d, e = (1, 2, 3, 4, 5)
a, b, c, d, e, *rest = (1, 2, 3, 4, 5)
Сообщения
Проверить
Показать подсказку

Вложенная распаковка

id: 40015_task_unpack_9

Проанализируйте код с вложенной распаковкой. Мы игнорируем некоторые значения, используя символ подчеркивания _. Введите значение, которое выведет print(lang). Ответ должен быть строкой без кавычек.

Что должно получиться?
person_info = ("Alex", (30, "Python"))

# Распаковка вложенного кортежа
name, (_, lang) = person_info

print(lang)
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру