Курс рассчитан на тех, кто уже пишет простые программы на Python: с переменными, списками, словарями, циклами и функциями. Этот урок — не объяснение, а самопроверка: пять коротких упражнений на то, что понадобится дальше. Если они решаются за пару минут — смело идите к следующему уроку. Если какое-то не получается, в конце урока есть ссылки, что повторить.
Заодно познакомьтесь с устройством уроков. Серые блоки — ячейки кода: нажмите «Выполнить», и код выполнится прямо в браузере. Под ячейкой виден сохранённый вывод — так он выглядел, когда урок писали; после запуска появится ваш. Код можно изменить кнопкой «Изменить» и вернуть обратно. Все ячейки урока работают в одной программе: переменная из одной ячейки видна в следующих — как в Jupyter-ноутбуке.
Весь курс построен вокруг одного примера — кассы «Кофейной лавки». Сейчас меню — обычный словарь, а к концу курса касса станет программой из нескольких классов: товары, корзина, скидки, оплата, склад и чек.
Словари и циклы
Словарь хранит пары «ключ → значение», а цикл for по items() перебирает пары целиком:
menu = {"эспрессо": 150, "капучино": 220, "чай": 120, "раф": 260, "какао": 190}
for name, price in menu.items():
print(f"{name}: {price} ₽")
print("позиций в меню:", len(menu))эспрессо: 150 ₽ капучино: 220 ₽ чай: 120 ₽ раф: 260 ₽ какао: 190 ₽ позиций в меню: 5
Посчитайте, сколько стоит взять по одной позиции каждого напитка из словаря menu, и сохраните сумму
в total.
menu.values(); сложить их можно встроенной sum или циклом.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
total = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
total = sum(menu.values())Генераторы списков
Генератор списка (list comprehension) строит новый список из старого одной строкой — выражение, for и при
желании if:
volumes = [250, 300, 400]
print([v * 2 for v in volumes])
print([v for v in volumes if v > 280])[500, 600, 800] [300, 400]
Сохраните в cheap список названий напитков из menu, которые стоят меньше 200 ₽, — в том порядке, в каком
они записаны в словаре.
[name for name, price in menu.items() if ...] — пары из словаря и условие на цену.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
cheap = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
cheap = [name for name, price in menu.items() if price < 200]Функции
Функция получает аргументы и возвращает результат через return. У параметра может быть значение по
умолчанию — тогда аргумент можно не передавать:
def per_cup(price, cups=1):
return price / cups
print(per_cup(300))
print(per_cup(300, 4))300.0 75.0
Напишите функцию with_tip(amount, percent=10): она возвращает сумму вместе с чаевыми, округлённую до целых
рублей встроенной round. Например, with_tip(500) — это 550, а with_tip(480, 5) — 504.
amount * percent / 100; вернуть нужно round(amount + чаевые).Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
def with_tip(amount, percent=10):
... # верните сумму с чаевымиУпражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
def with_tip(amount, percent=10):
return round(amount + amount * percent / 100)Словарь-счётчик
Частая задача — посчитать, сколько раз встречается каждое значение. Метод словаря get возвращает значение по
ключу, а если ключа нет — значение по умолчанию:
stock = {"зёрна": 12, "молоко": 4}
print(stock.get("молоко", 0))
print(stock.get("сливки", 0))4 0
В списке orders — напитки по порядку заказов за утро. Соберите словарь counts: напиток → сколько раз его
заказали.
counts[drink] на единицу; counts.get(drink, 0) вернёт 0 для нового напитка.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
orders = ["капучино", "чай", "капучино", "раф", "чай", "капучино"]
counts = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
orders = ["капучино", "чай", "капучино", "раф", "чай", "капучино"]
counts = {}
for drink in orders:
counts[drink] = counts.get(drink, 0) + 1Исключения: try и except
Если операция невозможна, Python выбрасывает исключение — например, int("сто") даёт ValueError.
Блок try/except перехватывает его, и программа продолжает работу:
for text in ["3", "три"]:
try:
print(int(text) * 2)
except ValueError:
print(f"не число: {text}")6 не число: три
Напишите функцию parse_price(text): если строка — целое число ("250"), функция возвращает его как int,
а если нет ("бесплатно", "") — возвращает None.
try — return int(text), в except ValueError — return None.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
def parse_price(text):
... # число или NoneУпражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
def parse_price(text):
try:
return int(text)
except ValueError:
return NoneЧто повторить, если не получилось
| Не получилось | Что повторить |
|---|---|
| словари и циклы | Словари, for |
| генераторы списков | List comprehensions |
| функции | Как определить функцию, значения по умолчанию |
| try/except | Обработка исключений |
Всё решилось? Отлично — в следующем уроке посмотрим на знакомые значения по-новому: как на объекты.