🏠 Домашнее задание

⚡ Кратко: домашнее задание

Функцию передают без скобок: square, а не square().

Lambda - короткая анонимная функция из одного выражения.

Функции высшего порядка принимают или возвращают другие функции.

map() преобразует элементы, filter() отбирает элементы, reduce() сводит коллекцию к одному значению.

any() возвращает True при хотя бы одном истинном элементе.

all() возвращает True, если все элементы истинны; для пустой коллекции это True.

sorted(), min() и max() принимают key-функцию для критерия сравнения.

Сложную lambda лучше заменить именованной функцией def.

Топ-3 ошибки: передать результат функции вместо ссылки; забыть list() вокруг map/filter; писать слишком сложную lambda вместо понятной функции.

Текст задания из LMS / источника

Выбор заказов

Отберите заказы дороже 500, создайте список названий продуктов в алфавитном порядке и верните итоговый список.

orders = [{"product": "Laptop", "price": 1200}, {"product": "Mouse", "price": 50}, {"product": "Keyboard", "price": 100}, {"product": "Monitor", "price": 300}, {"product": "Chair", "price": 800}, {"product": "Desk", "price": 400}]

Пример вывода: ['Chair', 'Laptop']

Статистика продаж

Вычислите выручку для каждого товара и верните словарь, отсортированный по убыванию выручки.

sales = [("Laptop", 5, 1200), ("Mouse", 50, 20), ("Keyboard", 30, 50), ("Monitor", 10, 300), ("Chair", 20, 800)]

Пример вывода: {'Chair': 16000, 'Laptop': 6000, 'Monitor': 3000, 'Keyboard': 1500, 'Mouse': 1000}

Пошаговое решение

Выбор заказов

def select_expensive_orders(orders):
    selected = filter(lambda order: order["price"] > 500, orders)
    names = map(lambda order: order["product"], selected)
    return sorted(names)

orders = [
    {"product": "Laptop", "price": 1200},
    {"product": "Mouse", "price": 50},
    {"product": "Chair", "price": 800},
]
print(select_expensive_orders(orders))

filter выбирает дорогие заказы, map достаёт product, sorted сортирует названия.

Статистика продаж

def sales_revenue(sales):
    revenue = {product: quantity * price for product, quantity, price in sales}
    sorted_items = sorted(revenue.items(), key=lambda item: item[1], reverse=True)
    return dict(sorted_items)

sales = [("Laptop", 5, 1200), ("Mouse", 50, 20), ("Keyboard", 30, 50), ("Monitor", 10, 300), ("Chair", 20, 800)]
print(sales_revenue(sales))

Сначала считаем выручку, затем сортируем пары по значению в обратном порядке.

Проверка в VS Code

  1. Создайте файл main.py и перенесите решение.
  2. Запустите python main.py в терминале.
  3. Сравните вывод с примером из задания.
  4. Проверьте крайние случаи: пустые коллекции, повторяющиеся значения и некорректные параметры.