Все разделы
Выбрать школу

Школа. Увлечения. Большое будущее.

PROSCHOOLS · ОБРАЗОВАНИЕ РЯДОМ

Ваш город

Выберите город, чтобы находить образование и возможности рядом.

Как учитываем городКаталог и кнопки «Выбрать школу» покажут школы выбранного города.Онлайн-курсы, учебник, ГДЗ и задания к экзаменам доступны по всей России.

Популярные города

Будет выбран: Вся Россия

Учебные материалы останутся прежними.

Поиск по сайту

По всему сайтуШколы выбранного города — выше в результатах

С чего начнём?

↑ ↓ — выбрать результат · Enter — открыть · Esc — закрыть

Практикум: задачи на кортежи и множества

💻 Информатика · 9 класс

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

Клавиатура в компьютерном классе
Иллюстрация к предмету «Информатика»Hmartil · Wikimedia Commons · CC BY-SA 4.0

Задача 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: без него порядок вывода непредсказуем.

Проверь себя

  1. Что вернёт swap((0, 0))? Ответ: (0, 0) — значения совпадают, обмен ничего не меняет.
  2. Вычислите вручную distance((0, 0), (5, 12)). Ответ: 13 — это пифагорова тройка 5-12-13.
  3. log = ['x', 'y', 'x']. Что вернёт sorted(unique_visitors(log))? Ответ: ['x', 'y']; set отбросит повтор, sorted даст стабильный порядок.
  4. Клубы a = ['Аня'] и b = ['Аня']. Что выведет only_one_club(a, b)? Ответ: [] — симметричная разность пуста, общий участник есть у обоих.

Кратко о главном

Кортежи удобны для записей с фиксированным смыслом позиций и распаковки; множества — для уникальности и операций «оба», «только один». Для воспроизводимого вывода множества строк из этих примеров используйте sorted. Произвольная смесь несравнимых типов, например строк и чисел, напрямую так не сортируется.

Связанные материалы

Кортежи: создание и распаковка. Основы программирования на Python. Массивы.

Источники и материалы