2.2 Условные конструкции#
Синтаксис условий#
В своём минимальном варианте условные конструкции в Python имеют следующий синтаксис:
if Условие:
Блок инструкций 1
Здесь мы видим, что в конце строки с инструкцией if и условием обязательно ставится :, обозначающее, что дальше будет блок из инструкций, которые выполнятся только в случае, если условие верно, в противном случае этот блок игнорируется и не исполняется. Специальных команд для определения начала и конца блока инструкций, относящегося к условию, нет. Блок определяется только отступами. Строка инструкций, следующая за if, должна быть с новым уровнем отступов (как правило, добавляется 4 пробела в начале строки), все последующие инструкции с тем же уровнем отступов будут относиться к этому же блоку. Как только количество отступов вернется к исходному, значит, блок инструкций закончился.
В качестве условий обычно используются выражения, которые возвращают значения True или False. Например, арифметические операции сравнения:
x = 10
# Можете раскомментировать следующую строку для проверки работы условия со своими значениями
# x = int(input())
if x >= 0:
print("Условие было верно")
print("Число положительное")
Условие было верно
Число положительное
Что может быть условием
Помимо выражения, возвращающего логический тип данных (True\False), в качестве условия можно указать абсолютно любой объект. В таком случае будет выполнено автоматическое приведение типа объекта к логическому. На практике это часто используется для проверки, не пустая ли переменная.
my_string = "some text"
if my_string:
print("string is not empty")
После блока if при необходимости можно добавить блок Иначе (else), который будет срабатывать только в случае, если условие оказалось неверным - вернуло False. Синтаксис конструкции будет выглядеть следующим образом:
if Условие:
Блок инструкций. Если условие верно
else:
Блок инструкций. Если условие неверно
x = -10
# x = int(input())
if x >= 0:
print("Условие было верно")
print("Число положительное")
else:
print("Условие было неверно")
print("Число отрицательное")
Условие было неверно
Число отрицательное
Примечательно, что блок инструкций может содержать любые инструкции, а значит можно писать и вложенные условия. Главное - правильно использовать отступы и разграничивать блоки.
x = -9
# x = int(input())
if x >= 0:
if x % 2 == 0:
print("x положительный и четный")
else:
print("x положительный и нечетный")
else:
if x % 2 == 0:
print("x отрицательный и четный")
else:
print("x отрицательный и нечетный")
x отрицательный и нечетный
Также стоит помнить, что чем больше вложенных конструкций мы используем, тем сложнее воспринимать код. Нужно стараться писать код максимально просто, облегчая его читаемость. В данном случае, чтобы избежать вложенности и реализовать серию условий, можно использовать ещё одно ключевое слово, которое может встречаться в условной конструкции - elif. Как и else, elif является необязательной частью условия, он также всегда следует после блока if и может повторяться сколько угодно раз:
if Условие:
Блок инструкций. Если условие верно
elif Условие:
Блок инструкций. Если текущее условие верно, а все условия выше нет.
elif Условие:
Блок инструкций. Если текущее условие верно, а все условия выше нет.
else:
Блок инструкций. Если все условия выше неверны
Отметим, что как только срабатывает одно из условий, все остальные дальше не проверяются и, соответственно, не исполняются. else срабатывает только в случаях, если ни одно условие не было верным.
x = -9
# x = int(input())
# Для составления сложных условий можно использовать логическое И (and) и ИЛИ (or),
# а также скобки для определения порядка операций
if x >= 0 and x % 2 == 0:
print("x положительный и четный")
elif x >= 0 and x % 2 != 0:
print("x положительный и нечетный")
elif x < 0 and x % 2 == 0:
print("x отрицательный и четный")
else:
print("x отрицательный и нечетный")
x отрицательный и нечетный
Тернарный оператор#
Обычные условия используются в ситуациях, когда надо выполнить код в зависимости от условия. Также бывают случаи, когда в зависимости от условия нужно присвоить значение переменной. Для этого используются тернарные операторы, также называемые условием в одну строку.
Рассмотрим пример. Допустим, мы определяем четность числа и с помощью обычного условия можем сделать это следующим образом:
x = 10
# x = int(input())
if x % 2 == 0:
x_parity = "четный"
else:
x_parity = "нечетный"
При использовании обычного условия для определения значения переменной код получается не очень безопасным. В одной из веток условной конструкции можно забыть определить имя переменной, что в свою очередь может привести к ошибке при дальнейшем исполнении кода. Тернарный оператор же решает данную проблему, гарантируя, что переменной всегда будет присвоено то или иное значение. Для его записи используется следующая конструкция:
Переменная = <Значение, если условие верно> if условие else <Значение, если условие неверно>
Что важно, в отличие от обычного условия блок else здесь является обязательным, а блока elif в принципе нет.
x = 10
# x = int(input())
x_parity = "четный" if x % 2 == 0 else "нечетный"
Сопоставление по шаблонам
В начале знакомства с Python сопоставления по шаблонам не найдут большого применения. Удобство их использования раскроется дальше, в создании алгоритмов, работа которых будет зависеть от количества и типов данных переданных на вход. Поэтому на текущем этапе обучения имеет смысл пропустить данную управляющую конструкцию.
При возвращении к данному материалу позже с описанием конструкции и примерами её использования можно ознакомиться в PEP 622