Урок 4. Условия: if, elif, else
До сих пор программы выполняли все строки подряд. Но часто нужно поступить по-разному в зависимости от данных: число чётное или нет, пароль верный или нет. Для этого есть условия — команда if и её продолжения elif и else.
Сравнения
Условие — это выражение, которое даёт True (истина) или False (ложь). Чаще всего его получают сравнением:
| Знак | Значение | Пример | Результат |
|---|---|---|---|
== | равно | 5 == 5 | True |
!= | не равно | 5 != 3 | True |
< | меньше | 5 < 3 | False |
> | больше | 5 > 3 | True |
<= | меньше или равно | 5 <= 5 | True |
>= | больше или равно | 3 >= 5 | False |
Равенство проверяют двумя знаками ==. Один знак = — это присваивание, его в условии писать нельзя.
x = 7
print(x > 5)
print(x == 10)
print(x != 10)
print(1 < x < 10)True
False
True
TrueПоследняя строка — двойное сравнение, как в математике: 1 < x < 10 значит «x больше 1 и меньше 10».
Команда if
age = int(input())
if age >= 18:
print("Совершеннолетний")
print("Проверка окончена")20Совершеннолетний
Проверка оконченаКак это устроено:
- после
if— условие, в конце строки — двоеточие; - строки, которые выполняются при истинном условии, сдвинуты вправо — это отступ, обычно четыре пробела;
- первая строка без отступа уже не относится к
ifи выполняется в любом случае.
Если ввести 15, программа выведет только «Проверка окончена».
Отступ в Python — не украшение, а часть языка: им отмечают блок — группу команд, которые выполняются вместе. В Pascal для этого пишут begin и end, в Python — сдвигают строки. Редакторы ставят отступ сами после строки с двоеточием. Если отступы сбились, Python сообщит об ошибке IndentationError — как её исправить, рассказано в справке IndentationError: ошибка отступа.
if и else
else («иначе») — блок, который выполняется, когда условие ложно:
n = int(input())
if n % 2 == 0:
print("чётное")
else:
print("нечётное")7нечётноеОстаток от деления на 2 у чётного числа равен нулю — это самая частая проверка в школьных задачах.
Несколько вариантов: elif
Когда вариантов больше двух, между if и else ставят одну или несколько веток elif («иначе если»):
age = int(input())
if age < 7:
print("Бесплатно")
elif age < 18:
print("Детский билет")
elif age < 65:
print("Взрослый билет")
else:
print("Льготный билет")12Детский билетУсловия проверяются сверху вниз, и выполняется только первая ветка с истинным условием. Возраст 12 меньше 18 — выполняется вторая ветка, а условие age < 65 уже не проверяется, хотя оно тоже истинно. Поэтому порядок веток важен: если поставить age < 65 первым, детского билета не получит никто. Ветка else в конце необязательна.
Логические операторы: and, or, not
| Оператор | Значение | Истинно, когда |
|---|---|---|
and | и | истинны оба условия |
or | или | истинно хотя бы одно |
not | не | условие ложно |
Пример — проверка високосного года. Год високосный, если делится на 4, но не делится на 100, или если делится на 400:
year = int(input())
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
print("високосный")
else:
print("невисокосный")2024високосныйПо этому правилу 2000 год високосный, а 1900 — нет. Без скобок Python выполнил бы and раньше or и получил бы тот же результат, но скобки делают условие понятнее для человека.
Вложенные условия
Внутри блока if может стоять ещё одно условие — с ещё большим отступом:
login = "admin"
password = "12345"
if login == "admin":
if password == "qwerty":
print("Добро пожаловать")
else:
print("Неверный пароль")
else:
print("Нет такого пользователя")Неверный парольГлубоко вложенные условия читать трудно. Часто их можно заменить одним условием с and или веткой elif.
Что считается истиной
В if можно поставить не только сравнение. Число 0, пустая строка "" и пустой список [] считаются ложью, всё остальное — истиной:
name = ""
if name:
print("Имя есть")
else:
print("Имя не введено")Имя не введеноЧастые ошибки
if x = 5:— один знак=вместо==. Python остановится сSyntaxErrorи подскажет, что, возможно, имелось в виду==.- Нет двоеточия в конце строки с
if,elifилиelse— ошибкаSyntaxError: expected ':'. - Условие «или» через одно сравнение — о нём ниже.
Запись answer == "да" or "yes" значит не «ответ — да или yes», а «ответ — да, или строка "yes"». Непустая строка всегда истинна, поэтому всё условие истинно при любом ответе:
answer = "нет"
if answer == "да" or "yes":
print("Условие выполнилось")
if answer == "да" or answer == "yes":
print("Это не выведется")
if answer in ("да", "yes"):
print("И это не выведется")Условие выполнилосьПравильно — повторить сравнение для каждого варианта или проверить, входит ли ответ в набор вариантов, через in.
Коротко
- Сравнения:
==,!=,<,>,<=,>=; равенство — два знака=. if условие:— двоеточие в конце, блок с отступом в четыре пробела.elif— следующий вариант,else— всё остальное; выполняется первая ветка с истинным условием.and— оба условия,or— хотя бы одно,not— отрицание.0,""и[]— ложь, остальное — истина.