Нашли ошибку?
Скачать чистый
мини-проект≈ 20 минупражнения: 0 из 5

Мини-проект: ценник

Класс Product для меню «Кофейной лавки»: цена за 100 мл, цена со скидкой и строка ценника, каталог из экземпляров и самый выгодный напиток.

Python запустится при первом выполнении

«Кофейная лавка» печатает новые ценники к осенней распродаже. На каждом — название, объём и цена, а у напитков со скидкой — цена после скидки. Заодно владелец хочет знать, какой напиток выгоднее всего по цене за 100 мл. Почти всё в проекте — из модуля: класс, __init__, методы и экземпляры в списке. Новое только одно — в шаге 2 метод вызовет другой метод того же экземпляра.

Шаг 1. Класс товара

[ ]Упражнение 1Класс Product решено

Допишите класс Product. Product("Капучино", 220, 300) хранит название, цену в рублях и объём в миллилитрах в атрибутах name, price и volume. Методы:

  • per_100ml() возвращает цену за 100 мл, округлённую до одного знака после запятой: у капучино — 73.3;
  • discounted(percent) возвращает цену со скидкой percent процентов, округлённую до целых рублей, и не меняет price: discounted(20) у капучино — 176.
class Product:
    def __init__(self, name, price, volume):
        ...

    def per_100ml(self):
        ...

    def discounted(self, percent):
        ...

Шаг 2. Ценник

Метод может вызывать другие методы того же экземпляра — через self: self.discounted(percent).

[ ]Упражнение 2Строка ценника решено

Добавьте в класс метод card(percent=0) — текст ценника. Без скидки: "Капучино, 300 мл — 220 ₽", со скидкой — цена после скидки и пометка: "Капучино, 300 мл — 176 ₽ (скидка 20 %)".

Класс объявляется одним блоком, поэтому скопируйте в ячейку класс из шага 1 целиком и допишите новый метод.

class Product:
    # скопируйте сюда __init__, per_100ml и discounted из шага 1

    def card(self, percent=0):
        ...

Шаг 3. Каталог

[ ]Упражнение 3Каталог напитков решено

В data — тройки «название, цена, объём». Создайте список catalog из экземпляров Product (из шага 2) по этим данным, в том же порядке.

data = [
    ("Эспрессо", 150, 60),
    ("Капучино", 220, 300),
    ("Латте", 240, 400),
    ("Раф", 260, 300),
    ("Американо", 170, 250),
    ("Какао", 190, 300),
]
catalog = ...

[ ]Каталог по строкам
for p in catalog:
    print(p.card())
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
Эспрессо, 60 мл — 150 ₽
Капучино, 300 мл — 220 ₽
Латте, 400 мл — 240 ₽
Раф, 300 мл — 260 ₽
Американо, 250 мл — 170 ₽
Какао, 300 мл — 190 ₽
Вывод появится, когда решите упражнение «Каталог напитков», — иначе он подскажет ответ. Ячейку можно и выполнить.

Шаг 4. Ценники к распродаже

[ ]Упражнение 4Все ценники со скидкой решено

На распродаже все напитки — со скидкой 20 %. Сохраните в cards список текстов ценников для всего каталога по порядку, а в sale_total — сколько стоит взять по одному напитку каждого вида по ценам распродажи.

cards = ...
sale_total = ...

Шаг 5. Самый выгодный

[ ]Упражнение 5Выгоднее всего решено

Найдите в каталоге напиток с самой низкой ценой за 100 мл и сохраните сам экземпляр в best.

best = ...

Итог

[ ]Ценники распродажи
print("Осенняя распродажа — скидка 20 %")
for text in cards:
    print(" ", text)
print(f"Всё меню по одной чашке: {sale_total} ₽")
print(f"Выгоднее всего: {best.name} — {best.per_100ml()} ₽ за 100 мл")
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
Осенняя распродажа — скидка 20 %
  Эспрессо, 60 мл — 120 ₽ (скидка 20 %)
  Капучино, 300 мл — 176 ₽ (скидка 20 %)
  Латте, 400 мл — 192 ₽ (скидка 20 %)
  Раф, 300 мл — 208 ₽ (скидка 20 %)
  Американо, 250 мл — 136 ₽ (скидка 20 %)
  Какао, 300 мл — 152 ₽ (скидка 20 %)
Всё меню по одной чашке: 984 ₽
Выгоднее всего: Латте — 60.0 ₽ за 100 мл
Итог появится, когда решите все упражнения урока, — в нём ответы. Ячейку можно и выполнить.

Самый выгодный напиток — латте: 60 ₽ за 100 мл, вчетверо дешевле эспрессо, хотя эспрессо в меню самый дешёвый. Цена за чашку и цена за объём — разные вопросы, и класс Product отвечает на оба одним вызовом метода.

Выводы с ответами появятся, когда решите все упражнения урока.

Посмотрите, что дал класс: данные товара и всё, что с ним считают, лежат в одном месте. Чтобы поменять формат ценника, достаточно поправить один метод card — и он изменится у всех товаров сразу. В следующем модуле экземпляры начнут хранить другие экземпляры: появится корзина с товарами.

Практика по модулю

Задачи по ООП в Python для самостоятельной практики появятся в разделе «Задачи → ООП в Python».

Нашли ошибку?