Для проверки истинности выражений в 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")