""" Урок 27. Summary session 7 — весь код примеров одним файлом. Источник: subjects/python-fundamentals/course/lessons/27-summary-session-7/examples.html Файл собран автоматически (tools/build_lesson_examples.py): правьте страницу урока. Запуск: python lesson-27.py """ # ==================================================================== # Пример 1. Создание кортежа, индексация, неизменяемость # ==================================================================== my_tuple = (1, 2, 3, "apple", True) print(my_tuple[0]) # 1 print(my_tuple[-1]) # True print(my_tuple[1:3]) # (2, 3) try: my_tuple[0] = 99 except TypeError as error: print(f"TypeError: {error}") # TypeError: 'tuple' object does not support item assignment # ==================================================================== # Пример 2. Одноэлементный кортеж: запятая обязательна # ==================================================================== not_tuple = (5) real_tuple = (5,) print(type(not_tuple), not_tuple) # 5 print(type(real_tuple), real_tuple) # (5,) # ==================================================================== # Пример 3. Операции, count(), index() # ==================================================================== a = (1, 2, 3) b = (4, 5) print(a + b) # (1, 2, 3, 4, 5) — конкатенация print(a * 2) # (1, 2, 3, 1, 2, 3) — повторение print(3 in a) # True print(len(a + b)) # 5 numbers = (1, 2, 3, 2, 4, 2) print(numbers.count(2)) # 3 print(numbers.index(2)) # 1 — индекс первого вхождения try: numbers.index(99) except ValueError as error: print(f"ValueError: {error}") # ValueError: tuple.index(x): x not in tuple # ==================================================================== # Пример 4. Упаковка и распаковка со звёздочкой # ==================================================================== packed_tuple = 1, 2, 3 # скобки не обязательны — упаковка x, y, z = packed_tuple # распаковка по трём переменным print(x, y, z) # 1 2 3 data = (1, 2, 3, 4, 5) first, *middle, last = data print(first, middle, last) # 1 [2, 3, 4] 5 only_first, *rest = data print(only_first, rest) # 1 [2, 3, 4, 5] # ==================================================================== # Пример 5. enumerate(): нумерация и правка списка по индексу # ==================================================================== languages = ("Python", "Java", "C++") for index, language in enumerate(languages, start=1): print(f"{index}: {language}") # 1: Python # 2: Java # 3: C++ numbers2 = [10, 20, 30, 40] for index, value in enumerate(numbers2): numbers2[index] = value * 10 print(numbers2) # [100, 200, 300, 400] # ==================================================================== # Пример 6. append против extend против insert # ==================================================================== fruits = ["apple", "banana"] fruits.append("cherry") print(fruits) # ['apple', 'banana', 'cherry'] fruits.append(["date", "fig"]) print(fruits) # ['apple', 'banana', 'cherry', ['date', 'fig']] — список как один элемент! fruits2 = ["apple", "banana"] fruits2.extend(["date", "fig"]) print(fruits2) # ['apple', 'banana', 'date', 'fig'] fruits2.insert(1, "kiwi") print(fruits2) # ['apple', 'kiwi', 'banana', 'date', 'fig'] # ==================================================================== # Пример 7. remove, pop, clear и их ошибки # ==================================================================== items = ["a", "b", "c"] items.remove("b") print(items) # ['a', 'c'] try: items.remove("z") except ValueError as error: print(f"ValueError: {error}") # ValueError: list.remove(x): x not in list popped = items.pop() print(popped, items) # c ['a'] popped_first = items.pop(0) print(popped_first, items) # a [] try: items.pop(5) except IndexError as error: print(f"IndexError: {error}") # IndexError: pop from empty list items.clear() print(items) # [] # ==================================================================== # Пример 8. sort() против sorted(), reverse() против reversed() # ==================================================================== numbers3 = [4, 1, 7, 2, 9] result = numbers3.sort() print(result, numbers3) # None [1, 2, 4, 7, 9] — sort() ничего не возвращает numbers4 = [4, 1, 7, 2, 9] new_list = sorted(numbers4) print(new_list, numbers4) # [1, 2, 4, 7, 9] [4, 1, 7, 2, 9] — исходный список цел words = ["banana", "kiwi", "apple", "fig"] print(sorted(words, key=len)) # ['fig', 'kiwi', 'apple', 'banana'] print(sorted(words, key=len, reverse=True)) # ['banana', 'apple', 'kiwi', 'fig'] numbers4.reverse() print(numbers4) # [9, 2, 7, 1, 4] — развернули на месте print(list(reversed(new_list))) # [9, 7, 4, 2, 1] — reversed() вернул итератор, обернули в list # ==================================================================== # Пример 9. min, max, sum с key # ==================================================================== students = [("Alice", 25), ("Bob", 20), ("Carol", 30)] print(min(students, key=lambda s: s[1])) # ('Bob', 20) print(max(students, key=lambda s: s[1])) # ('Carol', 30) print(sum(age for _, age in students)) # 75 # ==================================================================== # Пример 10. Отчёт по студентам # ==================================================================== students2 = [ ("Алексей", 80, 100), ("Мария", 50, 100), ("Дмитрий", 70, 100), ("Екатерина", 40, 100), ] print(f"{'Имя':<15}{'Процент':>10}{'Статус':>12}") print("-" * 37) for name, points, max_points in students2: percent = points / max_points * 100 status = "Незачёт" if percent < 50 else "Зачёт" print(f"{name:<15}{percent:>10.2f}{status:>12}") # Имя Процент Статус # ------------------------------------- # Алексей 80.00 Зачёт # Мария 50.00 Зачёт # Дмитрий 70.00 Зачёт # Екатерина 40.00 Незачёт # ==================================================================== # Пример 11. Анализ продаж # ==================================================================== sales = [("Bread", 20), ("Milk", 15), ("Eggs", 30), ("Butter", 10), ("Cheese", 25)] total = 0 top_product = sales[0] for product, amount in sales: total += amount if amount > top_product[1]: top_product = (product, amount) print("Общее количество проданных товаров:", total) # Общее количество проданных товаров: 100 print(f"Самый популярный товар: {top_product[0]} ({top_product[1]} шт.)") # Самый популярный товар: Eggs (30 шт.) print(sorted(sales, key=lambda item: -item[1])) # [('Eggs', 30), ('Cheese', 25), ('Bread', 20), ('Milk', 15), ('Butter', 10)]