В программировании ход выполнения может быть линейным, то есть выражения выполняются по порядку: от первого до последнего, без пропуска строк кода.

Чаще всего, однако, программы ведут себя иначе. В зависимости от определенных условий, некоторые части кода могут быть пропущены, в то время как другие исполняются. Это явление называется ветвлением и реализуется через условный оператор — уникальную конструкцию языка программирования.

Проведем аналогию с реальностью. Человек может следовать расписанию, которое можно рассматривать как его алгоритм или программный код для выполнения. Например, в 18:00 запланирован поход в бассейн. Однако, если вода из бассейна слита, биороботу Homo sapiens, получившему эту информацию, будет разумно отменить плавание, т.е., изменить осуществляемый "ход программы". Функционирование бассейна должно быть условием его посещения. Если условие не выполнено, надо действовать по-другому.

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

if логическое_выражение {
    выражение 1;
    выражение 2;
    …
}

На человеческий язык это переводится так: если логическое выражение возвращает истину, то исполняются выражения в фигурных скобках; при возврате ложи код в скобках не запускается. "if" с английского переводится как "если".

Код if логическое_выражение называется заголовком условного оператора, а код в скобках — телом условного оператора. Тело может быть как сложным набором выражений, так и пустым.

Пример использования условного оператора в языке Python:

if n < 100:
    b = n + a

В Python двоеточия заменяют фигурные скобки, а вложенностью кода выражается через отступы. В программировании принято использовать отступ в четыре пробела. Также можно использовать ключ Tab на клавиатуре. Большинство сред разработки сами создают отступы после двоеточия и перехода на новую строку. При работе в интерактивном режиме отступы задаются вручную.

Инструкция if в интерпретаторе Python: отступы

Подразумевается, что вложенность в теле оператора if обозначается тремя точками. Однако при создании скрипта такой символики нет. Также ничего общего с приглашением >>>.

Python отличается интуитивно понятным синтаксисом и читаемым кодом, минимизирующим вспомогательные элементы — такие, как скобки и точки с запятой. Разделение выражений происходит через переход на новую строку; вложенные выражения отличают от начала строки по отступу. В отличие от большинства языков, Python формализовал этот стиль как синтаксическое правило.

В приведенном примере n < 100 — это логическое выражение. Если оно истинно, выполняется код b = n + a. Если же ложное — он не исполняется.

Пример вырван из контекста и сам по себе не полноценный. Полная версия программы может выглядеть так:

b = 0
a = 50
n = 98
if n < 100:
    b = n + a
print(b)

Строка print(b) не относится к условному оператору — у нее нет отступа, она выполняется независимо.

Так как n равно 98, что меньше 100, значение b будет равно 148. Это число выводится на экран. Если бы n было, например, 101, на экран выведется 0. Это обусловлено тем, что условие в заголовке оператора оказалось ложным, и тело, следовательно, не выполнится, значение b останется неизменным.

Давайте визуализируем структуру программы:

Основная ветка программы и вложенный код

Основная ветка программы всегда исполняется, а вложенный код задействован лишь в случае истинности заголовка условного оператора, представленным тёмно-зеленой строкой.

Для наглядности работы алгоритма иногда строят блок-схемы. В них конструкциям соответствуют определенные фигуры: действия — прямоугольник, логика — ромб. Блок-схема для приведенного выше кода может выглядеть так:

Блок-схема оператора if

Инструкция if-else позволяет осуществлять полноценное ветвление с двумя различными путями исполнения кода.

Блок-схема конструкции if-else

При ложности логического выражения выполнение программы не возвращается к основной ветке сразу. Для случая False предусмотрен отдельный блок кода. Полная конструкция и реализована с использованием блока else, получая в результате if–else. Синтаксис следующий:

if логическое_выражение {
    выражение 1;
    выражение 2;
    …
}
else {
    выражение 3;
    …
}

При ложности условия блока if двигатель выполнения переключается на else. Блоки if и else взаимозаменяемы — выполнение обеих ветвей одновременно исключено. Заголовок else логического выражения не требует.

Пример применения условного оператора с else в Python:

tovar1 = 50
tovar2 = 32
if tovar1 + tovar2 > 99 :
    print("99 рублей недостаточно")
else:
    print("Чек оплачен")

Заметьте, логическое выражение у if может быть необычным: не просто a > b, а, например, просто переменная, число, True или False, а также сложные выражения с логическими И/ИЛИ.

a = ?
if a:
    a = 1

Если вместо вопроса — 0, это будет False, и условие не выполнится. Если a имеет другое значение, это будет расценено как True, и код выполнится. Другой пример:

a = 5 > 0
if a:
    print(a)

Здесь a уже связано с булевым значением True. В выражении a = 5 > 0 сравнение выполняется первым, а затем результат присваивается a. Если сомневаетесь в порядке — используйте скобки, например a = (5 > 0).

Третий пример:

if a > 0 and a < b:
    print(b - a)

Здесь код выполняется только если a больше нуля и меньше b. В Python, в отличие от других языков, возможна сокращенная запись:

if 0 < a < b:
    print(b - a)

Практическая работа

  1. Создайте программу (файл TakeInput.py), которая запрашивает у пользователя ввод с клавиатуры. Если пользователь что-то ввел, программа выводит "ОК". Если же просто нажат Enter, ничего не выводится.
  2. Создайте программу (файл PosNeg.py), которая запрашивает числовое значение у пользователя. При положительном числе выводится 1, если число отрицательное или ноль — отображается -1.

Вопросы для самопроверки:

  1. Как называется явление, когда выполнение кода зависит от определенных условий?
  2. Как в Python обозначается тело условного оператора?
  3. Что происходит, если условие в заголовке оператора if является ложным?
  4. Как называется конструкция, реализующая ветвление с двумя различными путями исполнения кода?
  5. Почему в Python логическое выражение может состоять из переменной, числа, True или False?

Программа курса:

  1. Описание курса
  2. Эволюция и основы языков программирования

    История программирования в кратком и понятном изложении. Что такое машинный язык, почему появились ассемблеры, языки высокого уровня и объектно-ориентированные. Зачем нужен транслятор, и почему он может быть либо компилятором, либо интерпретатором.

  3. Знакомство с основами Python

    Особенности языка Python, работа в интерактивном режиме и подготовка файлов с исходным кодом.

  4. Типы данных и переменные в Python

    Базовые типы данных в Python: целое, вещественное числа, строки. Изменение типа данных с помощью встроенных функций. Понятие об операциях и переменных. Присваивание значения переменной.

  5. Ввод и вывод данных с Python функциями

    Для вывода на экран в Python 3.x используется функция print(). Вывод может быть предварительно отформатирован. Для ввода данных с клавиатуры используется функция input(), которая возвращает в программу строку.

  6. Логические выражения и операторы в Python

    Логические выражения. Логические операторы языка Python: == (равно), != (не равно), (больше), = (больше или равно), and (логическое И), or (логическое ИЛИ), not (отрицание).

  7. Ветвление и условные операторы в Python

    Управление потоком программы с помощью операторов if-else. Создание логических ветвлений, обработка условий и выполнение разных блоков кода в Python.

  8. Изучите обработку ошибок и исключений в Python

    Общее представление об ошибках и исключениях в языке программирования Python. SyntaxError, NameError, TypeError, ValueError, ZeroDivisionError. Обработка исключений с помощью инструкции try-except.

  9. Множественное ветвление с if-elif-else в Python

    Оператор множественного ветвления языка Python позволяет организовать более двух веток выполнения программы без необходимости вложения условных операторов друг в друга. Конструкция включает одну ветку if, произвольное количество elif и необязательную ветку else.

  10. Цикл while и его применение в Python

    С помощью циклов в программировании организуется многократное следующее друг за другом выполнение одних и тех же участков кода. Бывают циклы с условием и со счетчиком. К первым относится цикл while, или цикл "пока".

  11. Изучите функции и их применение в Python

    Функции - важный элемент структурного программирования. Они позволяют обособить участок кода, выполняющий определенную задачу. В дальнейшем к нему можно обращаться из разных мест программы по имени, которым он назван. В языке Python функции определяются с помощью оператора def.

  12. Локальные и глобальные переменные в Python

    В программировании важное значение имеет представление о локальных и глобальных переменных. Локальные переменные существуют внутри функций и не доступны за ее пределами. Глобальные переменные видны во всей программе.

  13. Оператор return и возврат значений в Python

    С помощью оператора return можно вернуть значение из тела функции в основную программу. В языке программирования Python можно вернуть несколько значений, перечислив их через запятую после оператора return. Также в функции может быть несколько return, но всегда выполняется только один из них.

  14. Параметры и аргументы функций в Python

    Если функция имеет параметры, то при вызове в нее можно передавать данные в виде аргументов-значений или аргументов-ссылок. Параметры перечисляются в заголовке функции в скобках после имени, представляют собой локальные переменные. В Python тип параметров не указывается, хотя в других языках это может быть обязательным требованием.

  15. Встроенные функции Python для работы

    Язык программирования Python включает множество встроенных функций. В предыдущих уроках мы использовали такие функции как print() и input(), а также функции преобразования типов данных. В этом уроке рассматриваются встроенные функции для работы с символами и числами.

  16. Использование модулей в Python

    Использование модулей в программировании позволяет изолировать код, выполняющий частные задачи, в отдельные файлы. После чего обращаться к нему из разных программ. Создание модулей - следующий шаг после функций, когда участок кода обособляется внутри одного файла-программы. Для языка Python есть множество встроенных и сторонних модулей.

  17. Генерация псевдослучайных чисел в Python

    Для генерации псевдослучайных чисел в языке программирования Python используются функции модуля random. Функция random() генерирует вещественное число от 0 до 1. Функции randint() и randrange() производят целые псевдослучайные числа в указанных диапазонах.

  18. Изучение списков в Python - основы и операции

    Списки в Python - это аналог массивов в других языках программирования. Однако список может содержать элементы разных типов. В терминологии Python список - это изменяемая упорядоченная структура данных. Можно заменять его элементы, добавлять и удалять их, брать срезы. В язык встроены методы для работы со списками.

  19. Изучение цикла for в Python

    Цикл for в языке программирования Python предназначен для перебора элементов структур данных (списков, словарей, кортежей, множеств) и многих других объектов. Это не цикл со счетчиком, каковым является for во многих других языках. Нередко цикл for используется совместно с функцией range(), генерирующей объекты-диапазоны.

  20. Строки в Python - методы и срезы

    В Python строки - это неизменяемые последовательности символов или подстрок. Из них, так же как из списков, можно извлекать отдельные символы с помощью индексов или подстроки с помощью взятия срезов. В языке Python есть множество встроенных строковых методов, позволяющих упростить обработку строк.

  21. Кортежи - неизменяемые структуры данных

    Кортежи в Python - это неизменяемые структуры данных, состоящие из элементов одного или разных типов. Кортежи подобны спискам и обычно используются для защиты последних от изменений. Преобразование одного в другой выполняется с помощью встроенных функций tuple() и list().

  22. Словари в Python - работа с ключами и значениями

    Словарь в Python - это изменяемая неупорядоченная структура данных, элементами которой являются пары "ключ:значение". В словари можно добавлять и удалять элементы, изменять значения ключей. В Python словари имеют ряд методов, упрощающих работу с ними.

  23. Работа с файлами в Python

    В языке программирования Python открытие файлов выполняется с помощью функции open(), которой передается два аргумента - имя файла и режим. Файл может быть открыт в режиме чтения, записи, добавления. Также может быть указан тип файла - текстовый или бинарный. Для файлов есть ряд встроенных методов чтения, записи и др.