Условия if
Условие выбирает, какой код выполнить. Без условий нельзя ни фильтровать, ни проверять данные.
if, elif, else
Заголовок раздела «if, elif, else»amount = 75if amount >= 100: print("big")elif amount >= 50: print("medium")else: print("small")Ответ:
medium- Python проверяет условия сверху вниз. Выполняется первый подходящий блок.
elifиelseнеобязательны.- После
:идёт блок с отступом.
Сравнения
Заголовок раздела «Сравнения»print(1 == 1, 1 != 2, 3 < 5, 5 <= 5, 1 < 5 < 10)print("a" == "A", "a" < "b")Ответ:
True True True True TrueFalse True==сравнивает.=присваивает. Не путайте.- Цепочка
1 < x < 10работает как в математике. - Строки сравниваются с учётом регистра.
and, or, not
Заголовок раздела «and, or, not»device = "mobile"is_paid = Trueprint(device == "mobile" and is_paid)print(device == "web" or is_paid)print(not is_paid)Ответ:
TrueTrueFalse| Оператор | Значение |
|---|---|
a and b | Оба истинны |
a or b | Хотя бы одно истинно |
not a | Наоборот |
Если смешиваете and и or, ставьте скобки. and сильнее, чем or.
Оператор in
Заголовок раздела «Оператор in»in проверяет, есть ли значение в списке или подстрока в строке.
print("app" in ["web", "app"], "x" not in "abc", "err" in "error: disk")Ответ:
True True TrueЭто короткая замена цепочке or. Вместо ch == "web" or ch == "app" пишите ch in ["web", "app"].
Истинность значений
Заголовок раздела «Истинность значений»Любое значение можно использовать как условие. Ложными считаются 0, 0.0, "", [], None, False. Остальное истинно.
for v in [0, "", [], None, "0", [0], " "]: print(repr(v), bool(v))repr(v) печатает значение так, как его пишут в коде: строки в кавычках. Так видно пустую строку и пробел.
Ответ:
0 False'' False[] FalseNone False'0' True[0] True' ' TrueДва частых приёма:
coupon = Nonecode = coupon or "NO_COUPON" # значение по умолчаниюprint(code)
items = []if not items: # список пустой print("empty")
label = "paid" if code else "unpaid" # условное выражение в одну строкуprint(label)Ответ:
NO_COUPONemptypaidNone проверяйте через is None. Так вы отличите None от 0 и пустой строки.
match удобен, когда одно значение надо сравнить с несколькими вариантами. Он есть с Python 3.10.
for ch in ["web", "email", "tv"]: match ch: case "web" | "app": group = "own" case "email": group = "crm" case _: group = "other" print(ch, group)Ответ:
web ownemail crmtv other|объединяет несколько вариантов._— «всё остальное».matchумеет и больше (разбор словарей и списков). Для старта хватает простых значений.
Где это в работе
Заголовок раздела «Где это в работе»- Фильтр строк: оставить заказы дороже 100 с мобильного.
- Проверка данных: пустое поле,
None, значение вне допустимого списка. - Значения по умолчанию:
x or "unknown". - Группировка категорий: каналы в «свои» и «чужие».
Практика
Заголовок раздела «Практика»Задание 1
Заголовок раздела «Задание 1»Для сумм 120, 75, 10 выведите размер заказа: big при сумме от 100, medium от 50, иначе small.
Проверка:
120 big75 medium10 smallРешение
for a in [120, 75, 10]: if a >= 100: print(a, "big") elif a >= 50: print(a, "medium") else: print(a, "small")Задание 2
Заголовок раздела «Задание 2»Для возрастов 17, 18, 65 выведите ok, если возраст от 18 включительно до 65 не включая. Иначе no. Используйте цепочку сравнений.
Проверка:
17 no18 ok65 noРешение
for age in [17, 18, 65]: print(age, "ok" if 18 <= age < 65 else "no")Задание 3
Заголовок раздела «Задание 3»Заказы: [("anna", "mobile", 30), ("bob", "web", 200), ("carl", "mobile", 150)]. Выведите имена тех, кто купил с mobile и на сумму больше 100.
Проверка: carl
Решение
orders = [("anna", "mobile", 30), ("bob", "web", 200), ("carl", "mobile", 150)]for user, device, amount in orders: if device == "mobile" and amount > 100: print(user)Задание 4
Заголовок раздела «Задание 4»Для каналов web, tv, app, radio выведите known, если канал в списке ["web", "app", "email"], иначе unknown.
Проверка:
web knowntv unknownapp knownradio unknownРешение
for ch in ["web", "tv", "app", "radio"]: if ch in ["web", "app", "email"]: print(ch, "known") else: print(ch, "unknown")Задание 5
Заголовок раздела «Задание 5»Значения из файла: "", " ", "x", None. Выведите filled, если в значении есть текст, иначе empty.
Проверка:
'' empty' ' empty'x' filledNone emptyРешение
for v in ["", " ", "x", None]: if v and v.strip(): print(repr(v), "filled") else: print(repr(v), "empty")Задание 6
Заголовок раздела «Задание 6»Статусы заказа: paid, refunded, new. Через match выведите действие: paid и shipped дают keep, refunded даёт revert, всё остальное check.
Проверка:
paid keeprefunded revertnew checkРешение
for s in ["paid", "refunded", "new"]: match s: case "paid" | "shipped": action = "keep" case "refunded": action = "revert" case _: action = "check" print(s, action)Что запомнить
Заголовок раздела «Что запомнить»if / elif / else— выполняется первый подходящий блок.==сравнивает,=присваивает.Noneпроверяют черезis None.inзаменяет длинную цепочкуor.- Ложные значения:
0,"",[],None,False. Строка" "истинна. match— для выбора по значению._значит «всё остальное».
Дальше: Python Crash Course, глава 5.
Следующий урок: Словари.