📖 Теория практикума: как решать задачи с таблицами

⚡ Кратко

Во всех задачах практикума сначала определите форму данных: простой список, список кортежей или вложенный список покупок. Затем выберите действие: вывести, отфильтровать, посчитать итог или сформировать текст.

  • Для строки таблицы удобно распаковывать кортеж: for name, price in products.
  • Для денег используйте {value:.2f}.
  • Для таблиц используйте ширину: {name:<15}, {price:>10.2f}.

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) уместно, когда коллекция не пустая.