Для проверки истинности выражений в Python используется оператор if. Если условие истинно, то выполниться блок кода, который стоит после if. Если ложно, то тот, который после else.
In [1]:
print("Чему равно 2 * 2?")
a = int(input())
if a == 4:
print("Правда")
else:
print("Ложь")
Особенности синтаксиса:
if ставится :else ставится :if'у блок обозначается отступом в 4 пробела
ifпереводиться с английского какесли, аelse—иначе
else можно пропускать. Тогда при ложном условии ничего не выполнится:
In [2]:
if 2 * 2 == 5:
print("2 * 2 = 5")
# В выводе ничего нет
Блок кода внутри if или else может содержать сколько угодно кода, в том числе вложенные if:
In [3]:
if 10 > 5:
print("1")
print("2")
if 5 < 4:
print("3")
print("4")
else:
print("5")
else:
print("6")
По отступам очень удобно отслеживать, какой else к какому if относится. Если не ставить двоеточие или отступы, то программа будет выдавать ошибку и не запустится.
In [4]:
if 6 > 5
print("Пропущено двоеточие!")
SyntaxError: invalid syntax=ОшибкаСинтаксиса: некорректный синтаксис
In [5]:
if 6 > 5:
print("Пропущен отступ!")
IndentationError: expected an indented block=ОшибкаОтступа: ожидался блок с отступом
Конструкция elif позволяет рассматривать множественные случаи без вложенных if ... else в ветке else.
In [6]:
x = 3
if x < 2:
print("0 or 1")
else:
if x < 4:
print("2 or 3")
else:
print("4+")
Тот же код с использованием elif выглядит так:
In [7]:
x = 3
if x < 2:
print("0 or 1")
elif x < 4:
print("2 or 3")
else:
print("4+")
Для обозначения истинности в Python есть логический тип — bool. У него есть 2 возможных значения: True (истина) и False (ложь).
In [8]:
if True:
print("Ветка if")
else:
print("Ветка else")
In [9]:
if False:
print("Ветка if")
else:
print("Ветка else")
Переменные также могут быть логического типа:
In [10]:
a = True
b = False
print(a, b)
if a:
print("a =", a)
if b:
print("b =", b)
Понятно, что после if может стоять не только значение True или False. Посмотрим, что делает Python, если после if стоит нечто более странное?
Одни типы данных могут преобразовываться к другим, если это возможно (если Python позволяет). Такое преобразование называется преобразованием типов (или приведением типов).
Например, 0 преобразуется в False:
In [11]:
if 0:
print("Ветка if")
else:
print("Ветка else")
Любое другое число (в том числе и нецелое), отличное от 0 преобразуется в True:
In [12]:
if 3.5:
print("Ветка if")
else:
print("Ветка else")
In [13]:
if 0.0:
print("Ветка if")
else:
print("Ветка else")
In [14]:
if -1:
print("Ветка if")
else:
print("Ветка else")
Пустая строка "" преобразуется в False:
In [15]:
if "":
print("Ветка if")
else:
print("Ветка else")
Непустая строка — в True:
In [16]:
if "abc":
print("Ветка if")
else:
print("Ветка else")
Посмотрим, как устроены логические операции и операции сравнения в Python.
Список основных операторов сравнения, которые вам понадобятся:
| Действие | Обозначение в Python | Аналог в C++ | Аналог в Pascal | Приоритет |
|---|---|---|---|---|
| Равенство | a == b |
a == b |
a = b |
4 |
| Неравенство | a != b |
a != b |
a != b |
4 |
| Меньше | a < b |
a < b |
a < b |
4 |
| Меньше либо равно | a <= b |
a <= b |
a <= b |
4 |
| Больше | a > b |
a > b |
a > b |
4 |
| Больше либо равно | a >= b |
a >= b |
a >= b |
4 |
Список основных логических операторов, которые вам понадобятся:
| Действие | Обозначение в Python | Аналог в C++ | Аналог в Pascal | Приоритет |
|---|---|---|---|---|
| Логическое отрицание | not a |
!a |
not a |
5 |
| Логическое и | a and b |
a && b |
a and b |
6 |
| Логическое или | a or b |
a &vert&vert b |
a or b |
7 |
Примеры:
In [17]:
print(5 > 2)
print(not 5 > 2)
In [18]:
a = 5
b = 2
print(b == a)
print(b != a)
In [19]:
a = True
b = False
print(not b)
print(a and b)
print(a or b)
Как и во многих других языках программирования, вы можете составлять большие выражения из True, False, булевых переменных, операций сравнения, логических операций и скобок (для изменения приоритета). Например:
In [20]:
a = 5
b = 2
print(True and a > 2)
print(False or b >= 2)
if a >= 2 and b >= 2:
print("Обратите внимание, в if не нужны скобки вокруг условия")
In [21]:
x = 4
print(1 < x and x <= 6)
Вообще говоря, сравнения можно соединять в цепочки, например предыдущий пример можно переписать так:
In [22]:
x = 4
print(1 < x <= 6)
В таких случаях для читаемости кода полезно упорядочивать сравнения так, чтобы использовать только знаки < и <=.
Никогда не сравнивайте напрямую с True или False. Вместо этого используйте саму переменную или её отрицание. То же самое для сложных выражений.
In [23]:
bool_var = True
if bool_var == True:
print("Ай-ай")
if bool_var:
print("Так хорошо")
bool_var = False
if not bool_var:
print("Так тоже хорошо")
Конечно, в условии после if чаще всего приходится использовать логические операции. В качестве примера, давайте напишем программу, проверяющую является ли данный год високосным:
In [24]:
year = int(input())
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
print("YES")
else:
print("NO")