Python: Условная конструкция (if)
Логические выражения позволяют проверять разные условия. Но сами по себе они ничего не делают — только возвращают 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
нужен там, где внутри блока выполняются дополнительные действия, а не только возврат результата. Чем более сложные программы мы будем писать, тем чаще такие ситуации начнут встречаться.
Задание
Реализуйте функцию guess_number()
, которая принимает число и проверяет, равно ли число заданному (пусть это будет 42). Если равно, то функция должна вернуть строку 'You win!'
, в противном случае нужно вернуть строку 'Try again!'
.
guess_number(42) # You win!
guess_number(61) # Try again!
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
import index
def test1():
assert index.guess_number(100500) == "Try again!"
assert index.guess_number(42) == "You win!"
Решение учителя откроется через:
20:00
