Логические выражения позволяют проверять разные условия. Но сами по себе они ничего не делают — только возвращают True
или False
. Чтобы программа могла выполнять разные действия в зависимости от результата, в Python есть специальная конструкция if
.
if 5 > 3:
print("Yes, it is true")
Здесь строка "Yes, it is true"
напечатается, потому что условие 5 > 3
истинно.
Отступы в блоках
После слова if
пишется условие, затем ставится двоеточие, и начинается блок кода с отступом. Все строки с одинаковым отступом входят в один блок:
if 10 == 10:
print("First")
print("Second")
print("Goodbye!")
Здесь напечатаются "First"
и "Second"
, потому что условие выполнилось. А "Goodbye!"
напечатается в любом случае, так как она уже за пределами блока.
Использование if внутри функции
Рассмотрим функцию, которая определяет тип переданного предложения. Если оно оканчивается на знак вопроса, функция вернёт "question"
. В противном случае — "normal"
.
def get_type_of_sentence(sentence: str) -> str:
last_char = sentence[-1]
if last_char == '?':
return 'question'
return 'normal'
print(get_type_of_sentence('Hodor')) # => normal
print(get_type_of_sentence('Hodor?')) # => question
Здесь используется сразу два return
. Работа функции устроена так:
- если условие внутри
if
выполняется, срабатываетreturn 'question'
и функция завершается; - если условие не выполняется, управление переходит на следующую строку —
return 'normal'
.
Таким образом, у функции есть несколько возможных точек выхода. Это частая практика: в зависимости от условий функция может завершаться по-разному.
Несмотря на то что функция get_type_of_sentence
использует if
, она не является предикатом — она возвращает строки. А вот пример предиката: функция, которая проверяет, достаточно ли денег для покупки. Она возвращает логическое значение в зависимости от условия.
def has_enough_money(balance: int, price: int) -> bool:
if balance >= price:
return True
return False
print(has_enough_money(100, 50)) # => True
print(has_enough_money(30, 50)) # => False
Здесь используется if
, и результатом работы функции всегда будет True
или False
.
if и логические выражения
Функцию has_enough_money
мы написали через if
. Но в таком виде она могла бы обойтись и без него, потому что результат сравнения сам по себе уже является логическим выражением.
def has_enough_money(balance: int, price: int) -> bool:
return balance >= price
В простых случаях лучше сразу возвращать такое выражение. if
нужен там, где внутри блока выполняются дополнительные действия, а не только возврат результата. Чем более сложные программы мы будем писать, тем чаще такие ситуации начнут встречаться.