Перейти к содержимому
TelegramGitHub

Условия if

Условие выбирает, какой код выполнить. Без условий нельзя ни фильтровать, ни проверять данные.

amount = 75
if 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 True
False True
  • == сравнивает. = присваивает. Не путайте.
  • Цепочка 1 < x < 10 работает как в математике.
  • Строки сравниваются с учётом регистра.
device = "mobile"
is_paid = True
print(device == "mobile" and is_paid)
print(device == "web" or is_paid)
print(not is_paid)

Ответ:

True
True
False
ОператорЗначение
a and bОба истинны
a or bХотя бы одно истинно
not aНаоборот

Если смешиваете and и or, ставьте скобки. and сильнее, чем or.

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
[] False
None False
'0' True
[0] True
' ' True

Два частых приёма:

coupon = None
code = coupon or "NO_COUPON" # значение по умолчанию
print(code)
items = []
if not items: # список пустой
print("empty")
label = "paid" if code else "unpaid" # условное выражение в одну строку
print(label)

Ответ:

NO_COUPON
empty
paid

None проверяйте через 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 own
email crm
tv other
  • | объединяет несколько вариантов.
  • _ — «всё остальное».
  • match умеет и больше (разбор словарей и списков). Для старта хватает простых значений.
  • Фильтр строк: оставить заказы дороже 100 с мобильного.
  • Проверка данных: пустое поле, None, значение вне допустимого списка.
  • Значения по умолчанию: x or "unknown".
  • Группировка категорий: каналы в «свои» и «чужие».

Для сумм 120, 75, 10 выведите размер заказа: big при сумме от 100, medium от 50, иначе small.

Проверка:

120 big
75 medium
10 small
Решение
for a in [120, 75, 10]:
if a >= 100:
print(a, "big")
elif a >= 50:
print(a, "medium")
else:
print(a, "small")

Для возрастов 17, 18, 65 выведите ok, если возраст от 18 включительно до 65 не включая. Иначе no. Используйте цепочку сравнений.

Проверка:

17 no
18 ok
65 no
Решение
for age in [17, 18, 65]:
print(age, "ok" if 18 <= age < 65 else "no")

Заказы: [("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)

Для каналов web, tv, app, radio выведите known, если канал в списке ["web", "app", "email"], иначе unknown.

Проверка:

web known
tv unknown
app known
radio unknown
Решение
for ch in ["web", "tv", "app", "radio"]:
if ch in ["web", "app", "email"]:
print(ch, "known")
else:
print(ch, "unknown")

Значения из файла: "", " ", "x", None. Выведите filled, если в значении есть текст, иначе empty.

Проверка:

'' empty
' ' empty
'x' filled
None empty
Решение
for v in ["", " ", "x", None]:
if v and v.strip():
print(repr(v), "filled")
else:
print(repr(v), "empty")

Статусы заказа: paid, refunded, new. Через match выведите действие: paid и shipped дают keep, refunded даёт revert, всё остальное check.

Проверка:

paid keep
refunded revert
new 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.

Следующий урок: Словари.