Практикум: задачи на кортежи и множества
💻 Информатика · 9 класс
Четыре учебные задачи: обмен значениями через распаковку, расстояние между точками, уникальные посетители сайта и кружковая статистика. В каждой — полное решение и разбор.

Задача 1. Обмен значениями
Дана пара чисел, нужно вернуть её в обратном порядке. Классический приём — распаковка кортежа без временной переменной.
def swap(pair):
first, second = pair
return (second, first)
print(swap((3, 7))) # (7, 3)Элементы кортежа (3, 7) связываются с двумя именами в порядке распаковки. Работает и без скобок: a, b = b, a. Запомните: кортеж нельзя изменить (point[0] = 9 выбросит TypeError), поэтому для другой пары создают новый кортеж. Если внутри кортежа есть изменяемый объект, его содержимое при этом может меняться отдельно.
Задача 2. Расстояние между точками
Точка на плоскости — пара координат, то есть кортеж длины 2. Расстояние по теореме Пифагора: корень из суммы квадратов разностей координат.
def distance(p, q):
(x1, y1), (x2, y2) = p, q
return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
print(distance((0, 0), (3, 4))) # 5.0Вложенная распаковка (x1, y1), (x2, y2) = p, q сразу даёт четыре имени — код читается лучше, чем p[0], q[1]. Проверка: distance((1, 1), (1, 1)) == 0.0, а для точек (-1, -1) и (2, 3) получается 3-4-5, то есть 5.0.
Задача 3. Уникальные посетители
Журнал сайта — список логинов с повторами. Сколько разных логинов встретилось? Один человек может иметь несколько логинов, поэтому это не точный подсчёт физических посетителей. Множество хранит только уникальные элементы, повторы отбрасываются автоматически.
def unique_visitors(log):
return set(log)
log = ['anna', 'boris', 'anna', 'vera', 'boris', 'anna']
visitors = unique_visitors(log)
print(len(visitors)) # 3
print(sorted(visitors)) # ['anna', 'boris', 'vera']Важная тонкость: порядок элементов множества не гарантирован — вывод может отличаться от ожидаемого. Для воспроизводимого результата множество преобразуют в отсортированный список функцией sorted. Никогда не полагайтесь на порядок печати множества.
Задача 4. Кто в каком кружке
Даны списки участников двух кружков. Найдём общих участников и тех, кто ходит ровно в один кружок. Множества поддерживают операции: пересечение & и симметричную разность ^.
def common_members(club_a, club_b):
return sorted(set(club_a) & set(club_b))
def only_one_club(club_a, club_b):
return sorted(set(club_a) ^ set(club_b))
a = ['Аня', 'Борис', 'Вера']
b = ['Борис', 'Гриша', 'Аня']
print(common_members(a, b)) # ['Аня', 'Борис']
print(only_one_club(a, b)) # ['Вера', 'Гриша']Пересечение & оставляет элементы, которые есть в обоих множествах. Симметричная разность ^ — элементы, которые есть только в одном из двух (это объединение минус пересечение). Снова sorted: без него порядок вывода непредсказуем.
Проверь себя
- Что вернёт swap((0, 0))? Ответ: (0, 0) — значения совпадают, обмен ничего не меняет.
- Вычислите вручную distance((0, 0), (5, 12)). Ответ: 13 — это пифагорова тройка 5-12-13.
- log = ['x', 'y', 'x']. Что вернёт sorted(unique_visitors(log))? Ответ: ['x', 'y']; set отбросит повтор, sorted даст стабильный порядок.
- Клубы a = ['Аня'] и b = ['Аня']. Что выведет only_one_club(a, b)? Ответ: [] — симметричная разность пуста, общий участник есть у обоих.
Кратко о главном
Кортежи удобны для записей с фиксированным смыслом позиций и распаковки; множества — для уникальности и операций «оба», «только один». Для воспроизводимого вывода множества строк из этих примеров используйте sorted. Произвольная смесь несравнимых типов, например строк и чисел, напрямую так не сортируется.
Связанные материалы
Кортежи: создание и распаковка. Основы программирования на Python. Массивы.