""" Урок 24. Кортежи — весь код примеров одним файлом. Источник: subjects/python-fundamentals/course/lessons/24-tuples/examples.html Файл собран автоматически (tools/build_lesson_examples.py): правьте страницу урока. Запуск: python lesson-24.py """ # ==================================================================== # Пример 1. Создание кортежей и неизменяемость # ==================================================================== many_values = (1, 2, 3, "apple", True) empty_tuple = () single_value = (5,) not_a_tuple = (5) # это просто число в скобках packed_tuple = 1, 2, 3 # скобки вообще не обязательны print(many_values) print(empty_tuple) print(single_value, type(single_value)) # (5,) print(not_a_tuple, type(not_a_tuple)) # 5 print(packed_tuple, type(packed_tuple)) # (1, 2, 3) numbers = (10, 20, 30) try: numbers[1] = 40 except TypeError as error: print("TypeError:", error) # 'tuple' object does not support item assignment updated_numbers = numbers[:1] + (40,) + numbers[2:] print(updated_numbers) # (10, 40, 30) — не изменили, а собрали новый кортеж # ==================================================================== # Пример 2. Операции с кортежами и преобразование в список # ==================================================================== tuple1 = (1, 2) tuple2 = (3, 4) print(tuple1 + tuple2) # (1, 2, 3, 4) print(tuple1 * 3) # (1, 2, 1, 2, 1, 2) print(2 in tuple1) # True print(len(tuple1)) # 2 print((1, 2, 3) == (1, 2, 4)) # False — сравнение поэлементное values = [1, 2, 3] as_tuple = tuple(values) as_list = list(as_tuple) print(as_tuple, type(as_tuple)) # (1, 2, 3) print(as_list, type(as_list)) # [1, 2, 3] # ==================================================================== # Пример 3. Карточка пользователя: распаковка в именованные переменные # ==================================================================== user = ("Alice", 29, "Python") name, age, language = user print(f"Имя: {name}") print(f"Возраст: {age}") print(f"Язык: {language}") # ==================================================================== # Пример 4. Перебор: for, распаковка пар, enumerate() # ==================================================================== scores = (10, 20, 30, 40) for score in scores: print(score) pairs = ((1, "apple"), (2, "banana"), (3, "cherry")) for number, fruit in pairs: print(f"Число: {number}, Фрукт: {fruit}") languages = ("Python", "Java", "C++") for index, language in enumerate(languages, start=1): print(f"{index}: {language}") print(tuple(enumerate(languages))) # ((0, 'Python'), (1, 'Java'), (2, 'C++')) — enumerate сам по себе не печатается как список пар # ==================================================================== # Пример 5. Уникальные элементы без неизученных коллекций # ==================================================================== numbers = (1, 2, 3, 2, 1, 4, 5, 3, 6) unique_numbers = tuple() for number in numbers: if number not in unique_numbers: unique_numbers += (number,) print("Уникальные элементы:", unique_numbers) # ==================================================================== # Пример 6. Элементы выше среднего # ==================================================================== numbers = (10, 15, 20, 25, 30) average = sum(numbers) / len(numbers) greater_than_average = tuple() for number in numbers: if number > average: greater_than_average += (number,) print("Элементы больше среднего:", greater_than_average) # ==================================================================== # Пример 7. Возрастающая прогрессия (задача из домашнего задания) # ==================================================================== numbers = (3, 7, 2, 8, 5, 10, 1) increasing = tuple() current_max = None for number in numbers: if current_max is None or number > current_max: increasing += (number,) current_max = number print("Кортеж по возрастанию:", increasing) # (3, 7, 8, 10) # ==================================================================== # Пример 8. Сравнение соседних элементов # ==================================================================== numbers = (10, 20, 15, 30, 25, 35) for index, value in enumerate(numbers[:-1]): next_value = numbers[index + 1] if value > next_value: print(f"{value} больше, чем {next_value}") # ==================================================================== # Пример 9. Индексы повторяющихся элементов # ==================================================================== numbers = (1, 2, 3, 4, 2, 5, 3, 6, 4, 2, 9) processed = tuple() for number in numbers: if numbers.count(number) > 1 and number not in processed: indexes = tuple() for index, current in enumerate(numbers): if current == number: indexes += (index,) processed += (number,) print(f"Индексы элемента {number}:", *indexes) # ==================================================================== # Пример 10. Распаковка остатка через * # ==================================================================== numbers = (3, 7, 2, 8, 5, 10, 1) first, *middle, last = numbers print("Первый:", first) print("Середина:", middle) # [7, 2, 8, 5, 10] — список, не кортеж print("Последний:", last) # ==================================================================== # Пример 11. Ловушка: изменяемый объект внутри неизменяемого кортежа # ==================================================================== data = ([1, 2], "items") data[0].append(3) # список внутри кортежа изменился print(data) # ([1, 2, 3], 'items') try: data[0] = [9, 9] # а вот заменить сам элемент кортежа нельзя except TypeError as error: print("TypeError:", error)