2.2 Условные конструкции

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