В этом уроке мы подробно разберем одну из ключевых особенностей кортежей (tuples) в Python — их неизменяемость. Вы узнаете, почему кортежи нельзя редактировать так же, как списки, что происходит при попытке изменить элемент, и какие существуют обходные пути для "обновления" данных в кортеже. Мы также рассмотрим нюансы работы с вложенными изменяемыми объектами внутри кортежей. Эти знания помогут вам писать более безопасный и предсказуемый код, избегая распространенных ошибок `TypeError`.
- Модуль 1: Основы синтаксиса Python
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Арифметические операторы (+, -, *, /).
- Целочисленное деление и остаток (// и %).
- Возведение в степень (**).
- Операторы сравнения.
- Логические операторы (and, or, not).
- Операторы присваивания (=, +=, -=).
- Операторы принадлежности (in, not in).
- Операторы идентичности (is, is not).
- Битовые операторы.
- Тернарный оператор.
- Модуль 4: Ввод и вывод данных
- Модуль 5: Условные конструкции
- Модуль 6: Циклы
- Модуль 7: Строки
- Модуль 8: Списки
- Модуль 9: Кортежи
- Создание кортежей.
- Неизменяемость кортежей.
- Распаковка кортежей.
- Именованные кортежи.
- Модуль 10: Словари
- Модуль 11: Множества
- Модуль 12: Функции
- Модуль 13: Встроенные функции
- Модуль 14: Работа с файлами
- Модуль 15: Обработка исключений
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
Создание кортежа с одним элементом
Чтобы Python распознал переменную как кортеж, а не как число в скобках, при создании кортежа из одного элемента необходимо поставить специальный знак. Допишите код.
# Это просто число
num = (50)
# А это должен быть кортеж
my_tuple = (50 input1S )
print(type(my_tuple))Что произойдет при попытке изменения?
Мы создали кортеж `numbers`. Проанализируйте код, где происходит попытка присвоить новое значение одному из элементов. Что выведет программа?
numbers = (1, 2, 3)
numbers[1] = 99
print(numbers)Операции с кортежами
Распределите строки кода на две группы: те, что выполнятся успешно, и те, что вызовут ошибку из-за неизменяемости кортежей. Представьте, что `t = (1, 2, 3)`.
print(t[0])t[0] = 5del t[1]new_t = t + (4,)t.append(4)x = len(t)t.sort()Исправьте ошибку добавления элемента
У кортежей нет метода `.append()`. Чтобы "добавить" элемент, нужно создать **новый** кортеж, объединив старый с новым элементом. Исправьте строку с ошибкой.
colors = ('red', 'green')colors.append('blue')print(colors)Изменяемое внутри неизменяемого
Кортежи неизменяемы, но если внутри кортежа лежит список, можно ли изменить этот список? Посмотрите на код и выберите правильный вывод.
# Кортеж содержит число и список
box = (100, ['A', 'B'])
# Пытаемся изменить список внутри кортежа
box[1].append('C')
print(box)Обходной путь: изменение через список
Чтобы добавить элемент или изменить значение в кортеже, часто используют конвертацию в список и обратно. Расставьте строки кода в правильном порядке, чтобы заменить `'cat'` на `'lion'` в кортеже `zoo`.
temp_list = list(zoo)temp_list[1] = 'lion'zoo = tuple(temp_list)zoo = ('dog', 'cat', 'bird')print(zoo)Методы кортежей
Так как кортежи неизменяемы, у них очень мало методов. Сопоставьте методы и функции с их описанием.
.count().index()len()Защита данных от изменений
Соберите код, который использует кортеж для хранения настроек программы (чтобы их случайно не изменили). Если настройки пытаются изменить, код должен перехватить ошибку. Одна строка лишняя (с неправильным синтаксисом обработки ошибок).
except TypeError:settings = ('localhost', 8080)try: settings[1] = 9090 print("Настройки защищены!")except ValueError:Умножение кортежей
Оператор `*` работает с кортежами как оператор повторения. Какой будет результат работы функции `len()` для переменной `result`? Введите число.
pair = (0, 1)
result = pair * 3
print(len(result))