Статья Автор: Александр Ф. Алейников

4.1.1 Выбор из двух. Условный оператор if-else

Условный оператор if-else

Мы познакомились с базовыми строительными блоками программ, научились писать программы, обеспечивающие ввод, обработку и вывод данных. Более того, мы умеем работать со строками и числами, как мы делаем это в математике. Теперь научимся управлять ходом выполнения программы.

Программы должны уметь выполнять разные действия в зависимости от введенных данных. Для принятия решения программа проверяет, истинно или ложно определенное условие.

В Python существует несколько способов проверки, и в каждом случае возможны два исхода: истина (True) или ложь (False).

Проверка условий и принятие решений по результатам этой проверки называется ветвлением (branching). Программа таким способом выбирает, по какой из возможных ветвей ей двигаться дальше.

В Python проверка условия осуществляется при помощи ключевого слова if.

Рассмотрим следующую программу:

answer = input('Какой язык программирования мы изучаем?')
if answer == 'Python':
    print('Верно! Мы ботаем Python =)')
    print('Python - отличный язык!')

Программа просит пользователя ввести текст и проверяет результат ввода. Если введенный текст равен строке «Python», то выводит пользователю текст:

Верно! Мы ботаем Python =)
Python - отличный язык!

Двоеточие (:) в конце строки с инструкцией if сообщает интерпретатору Python, что дальше находится блок команд. В блок команд входят все строки с отступом под строкой с инструкцией if, вплоть до следующей строки без отступа.

Если условие истинно, выполняется весь расположенный ниже блок. В предыдущем примере блок инструкций составляет третья и четвертая строки программы.

Блоком кода называют объединенные друг с другом строки. Они всегда связаны с определенной частью программы (например, с инструкцией if). В Python блоки кода формируются при помощи отступов.

Предыдущая программа выводит текст в случае, если условие истинно. Но если условие ложно, то программа ничего не выводит. Для того чтобы обеспечить возможность выполнять что-либо в случае, если условие оказалось ложным, мы используем ключевое слово else.

answer = input('Какой язык программирования мы изучаем?')

if answer == 'Python':
    print('Верно! Мы ботаем Python =)')
    print('Python - отличный язык!')
else:
    print('Не совсем так!')

В новой программе мы обрабатываем сразу два случая: если условие истинно (пользователь ввел «Python»), и если условие ложно (пользователь ввел что угодно, кроме «Python»).

Отступы

В некоторых языках программирования отступы — дело личного вкуса, и можно вообще обходиться без них. Однако в Python они – неотъемлемая часть кода. Именно отступ сообщает интерпретатору Python, где начинается и где заканчивается блок кода.

Отступ — небольшое смещение строки кода вправо. В начале такой строки находятся пробелы, и поэтому она на несколько символов отстоит от левого края.

Некоторым инструкциям в Python (например, инструкции if) именно блок кода сообщает, какие действия следует предпринять. После if блок кода информирует интерпретатор Python, как действовать, если условие истинно, и как — если оно ложно.

По соглашению PEP 8, для отступа блоков кода используются 4 пробела. Если в среде VS Code или Wing IDE нажать на клавишу Enter после if, она автоматически выставит 4 пробела.

Операторы сравнения

Можно заметить, что в проверке условия мы использовали двойное равенство (==), вместо ожидаемого одиночного (=). Не стоит путать оператор присваивания (=) с условным оператором (==).

Оператор присваивания (=) присваивает переменным значения:

num = 1992
s = 'I love Python'

Для проверки двух элементов на равенство Python использует удвоенный знак равно (==). Вот так:

if answer == 'Python':
    ...

if name == 'Gvido':
    ...

if temperature == 40:
    ...

Путаница с операторами == и = является одной из самых распространенных ошибок в программировании. Эти символы используются не только в Python, и каждый день множество программистов используют их неправильно.

В Python существует 6 основных операторов сравнения.

  Выражение                        Описание
if x > 7 если x больше 7
if x < 7 если x меньше 7
if x >= 7 если x больше либо равен  7
if x <= 7 если x меньше либо равен  7
if x == 7 если x равен  7
if x != 7 если x не равен  7

Рассмотрим пример:

num1 = int(input())
num2 = int(input())

if num1 < num2:
    print(num1, 'меньше чем', num2)
if num1 > num2:
    print(num1, 'больше чем', num2)

if num1 == num2:  # используем двойное равенство
    print(num1, 'равно', num2)
if num1 != num2:
    print(num1, 'не равно', num2)

Цепочки сравнений

Операторы сравнения в Python можно объединять в цепочки (в отличие от большинства других языков программирования, где для этого нужно использовать логические связки), например, a == b == c или 1 <= x <= 10. Следующий код проверяет, находится ли значение переменной age в диапазоне от 3 до 6:

age = int(input())
if 3 <= age <= 6:
    print('Вы ребёнок')

Код, проверяющий равенство трех переменных, может выглядеть так:

if a == b == c:
    print('числа равны')
else:
    print('числа не равны')

Транзитивность

Операция равенства является транзитивной. Это означает, что если a == b и b == c, то из этого следует, что a == c. Именно поэтому предыдущий код, проверяющий равенство трех переменных, работает, как полагается. 

Из курса математики вам могут быть знакомы другие примеры транзитивных операций:

  • Отношение порядка: если a>b и b>c, то a>c;
  • Параллельность прямых: если a?b и b ?c, то a?c;
  • Делимость: если a делится на b и b делится на c, то a делится на c.

Наглядно транзитивность отношения порядка можно понять на таком примере: если сосед слева старше вас (a>b), а вы старше соседа справа (b>c), то сосед слева точно старше соседа справа (a>c).

Операция неравенства (!=), в отличие от операции равенства (==), является нетранзитивной. То есть из того, что a != b и b != c вовсе не следует, что a != c. Действительно, если вас зовут не так, как соседа слева и не так, как соседа справа, то нет гарантии, что у обоих соседей не окажутся одинаковые имена.

Таким образом, следующий код вовсе не проверяет тот факт, что все три переменные различны:

if a != b != c:
    print('числа не равны')
else:
    print('числа равны')

Код, проверяющий, что значения трех переменных различны, мы научимся писать немного позже.

Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать