1. Данные как список кортежей
В задачах практикума запись вроде ("Кофе", 127.99) означает одну строку данных. Список таких кортежей — это мини-таблица.
products = [("Кофе", 127.99), ("Чай", 52.49)]
for name, price in products:
print(name, price)
2. Фильтрация
Фильтрация — это цикл и условие. В задаче про количество больше 10 нужно смотреть на второй элемент кортежа.
data = [("апельсин", 5), ("вишня", 12)]
for product, amount in data:
if amount > 10:
print(product, amount)
3. Табличный вывод
f-strings позволяют задать ширину поля и выравнивание. Левое выравнивание подходит для названий, правое — для чисел.
name = "Кофе"
price = 127.99
print(f"{name:<15} | {price:>10.2f}")
4. Динамическая ширина
Если названия разной длины, сначала найдите максимальную длину, а потом используйте её в формате.
products = [("Молоко", 3, 10), ("Подсолнечное масло", 5, 3)]
name_width = max(len(name) for name, _, _ in products) + 3
for name, price, quantity in products:
print(f"| {name:<{name_width}} | {price:>7} | {quantity:>10} |")
max(...) — современный компактный вариант; его можно заменить обычным циклом, как в исходном решении.5. Вложенные покупки
В задаче про письма клиенту каждый клиент хранит вложенный список товаров. Внешний цикл идёт по клиентам, внутренний — по покупкам клиента.
clients = [("Иван", "Иванов", 10, [("Кофе", 100.0), ("Чай", 200.0)])]
for name, surname, discount, products in clients:
total = 0
for product_name, price in products:
total += price
print(name, surname, total, discount)
6. Итоги и средние
Отчёты требуют накопить сумму и затем посчитать среднее. Деление на len(collection) уместно, когда коллекция не пустая.