Python If...Else
Узнайте, как работают операторы if, elif и else в Python — синтаксис, операторы сравнения, логические операторы, вложенные условия и тернарный оператор.
Условные операторы позволяют программе на Python выбирать между разными путями выполнения в зависимости от того, истинно или ложно условие. В этой главе рассматриваются все формы условных операторов Python: if, if-else, if-elif-else, вложенный if и однострочное сокращение — а также операторы сравнения и логические операторы, благодаря которым условия работают.
Оператор if
Оператор if — это простейшее условие. Блок с отступом выполняется только в том случае, если условие принимает значение True.
if condition:
# code that runs when condition is TrueПример
Python использует отступы (по соглашению 4 пробела) для определения блока — фигурных скобок нет. Если условие равно False, блок просто пропускается.
Операторы сравнения
Условия строятся из выражений, которые сравнивают два значения. Каждое выражение возвращает Python boolean — True или False.
| Оператор | Значение | Пример | Результат |
|---|---|---|---|
== | Равно | 5 == 5 | True |
!= | Не равно | 5 != 3 | True |
> | Больше | 5 > 3 | True |
< | Меньше | 5 < 3 | False |
>= | Больше или равно | 5 >= 5 | True |
<= | Меньше или равно | 4 <= 5 | True |
Полный справочник операторов, включая арифметические и операторы присваивания, см. в разделе Операторы Python.
Логические операторы
Логические операторы объединяют несколько условий в одно выражение.
| Оператор | Возвращает True, если… | Пример |
|---|---|---|
and | Оба условия равны True | x > 0 and x < 10 |
or | Хотя бы одно условие равно True | x < 0 or x > 100 |
not | Условие равно False | not logged_in |
Пример — and
Пример — or и not
day = "Saturday"
if day == "Saturday" or day == "Sunday":
print("It is the weekend")
logged_in = False
if not logged_in:
print("Please log in")Оператор if-else
Добавьте ветку else, чтобы обработать случай, когда условие равно False.
if condition:
# runs when condition is True
else:
# runs when condition is FalseПример
При каждом запуске выполняется только один из двух блоков.
Оператор if-elif-else
Используйте elif (сокращение от «else if») для последовательной проверки нескольких условий. Python проверяет их сверху вниз и выполняет первый подходящий блок. Блок else в конце является «ловушкой» для случаев, когда ни одно из условий не совпало.
if condition1:
# runs when condition1 is True
elif condition2:
# runs when condition2 is True and condition1 is False
elif condition3:
# runs when condition3 is True and the above are False
else:
# runs when none of the above are TrueКоличество ветвей elif не ограничено, но if может быть только один, а else — не более одного.
Пример — классификация оценок
Почему важен порядок: как только Python находит истинное условие, он прекращает проверку. Если написать score >= 60 первым, оценка 95 выведет "Grade: C", потому что 95 тоже >= 60. Всегда ставьте наиболее конкретное (строгое) условие первым.
Вложенные операторы if
Оператор if может находиться внутри блока другого оператора if. Это называется вложением и удобно, когда нужно применить вторичную проверку только после прохождения первичной.
score = 85
if score >= 60:
if score >= 90:
print("Grade: A")
elif score >= 80:
print("Grade: B")
else:
print("Grade: C")
else:
print("Grade: F")
# Output: Grade: BВажно: глубокое вложение затрудняет чтение кода. Для плоских сравнений предпочтительнее цепочки elif, а при вложении более двух уровней стоит рассмотреть вынос вложенной логики в отдельную функцию.
Истинность и ложные значения
Python неявно рассматривает многие значения как True или False без использования оператора сравнения. Значениями, которые считаются False в булевом контексте, являются:
NoneFalse0(целый ноль),0.0(ноль с плавающей точкой)""(пустая строка),[](пустой список),{}(пустой dict),()(пустой кортеж),set()(пустое множество)
Всё остальное считается True. Это позволяет писать лаконичные проверки:
name = "Alice"
if name:
print("Name is set") # prints because "Alice" is truthy
items = []
if not items:
print("The list is empty") # prints because [] is falsy
value = None
if value is None:
print("No value provided") # use 'is None' for explicit None checksПри проверке на None используйте is None / is not None (а не == None) — это принятое соглашение в Python, которое исключает случайные совпадения.
Краткая форма if (тернарное выражение)
Однострочное условное выражение в Python присваивает одно из двух значений в зависимости от условия:
value = result_if_true if condition else result_if_falseПример
age = 20
status = "adult" if age >= 18 else "minor"
print(status)
# Output: adultЭто эквивалентно:
if age >= 18:
status = "adult"
else:
status = "minor"Используйте тернарную форму для простого присваивания значений. Избегайте вложенности — a if c1 else b if c2 else c быстро становится нечитаемым.
Оператор pass
Python требует наличия хотя бы одного оператора в каждом блоке. Если нужно определить ветку if, которая намеренно ничего не делает (заглушка на время разработки), используйте pass:
x = 10
if x > 5:
pass # TODO: handle this case later
else:
print("x is 5 or less")pass — это пустая операция, которая сообщает Python: «этот блок намеренно пуст».
Оператор-морж := (Python 3.8+)
Оператор-морж присваивает значение переменной и проверяет его в одном выражении. Он наиболее полезен, когда проверяемое значение нужно внутри блока if:
numbers = [1, 2, 3, 4, 5]
if (n := len(numbers)) > 3:
print(f"List has {n} items, which is more than 3")
# Output: List has 5 items, which is more than 3Без := потребовалась бы отдельная строка присваивания. Скобки вокруг n := len(numbers) здесь обязательны, чтобы избежать неоднозначности.
Типичные ошибки
Использование = вместо ==
# Wrong — this is assignment, not comparison, and causes a SyntaxError in conditions
# if x = 5:
# Correct
if x == 5:
print("x is five")Забытое двоеточие
Каждая строка с if, elif и else должна заканчиваться :. Пропущенное двоеточие вызывает SyntaxError.
Непоследовательные отступы
Все операторы в одном блоке должны иметь одинаковый отступ. Смешивание табуляции и пробелов вызывает IndentationError. Используйте 4 пробела — это стандарт PEP 8.
Что и когда использовать
| Сценарий | Лучший вариант |
|---|---|
| Одно условие, одно действие | if |
| Два взаимоисключающих пути | if-else |
| Три и более вариантов | if-elif-else |
| Вторичная проверка внутри ветки | Вложенный if |
| Простое присваивание значения | Тернарный x if c else y |
| Проверка на несколько значений (Python 3.10+) | Оператор match |
Практика
Освоив условные операторы, логичным следующим шагом будет повторение кода с помощью циклов while в Python и циклов for в Python.