Ветвление. Условный оператор

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

Бывают случаи, когда на выполнение чего-либо влияют определённые факторы. Например, если погода будет хорошей, то Настя пойдёт гулять и есть мороженое, однако, если погода будет плохой – она будет сидеть дома и делать уроки. В данном случае, окончательное действие зависело от того, какой будет погода. Это и есть условие выполнения.


Приведем аналогию из реальной жизни. Отправляя вас школу, родители вам выдают финансы на буфет. Вы приходите в школу, на большой перемене идете в буфет, покупаете себе выпечку. Вроде перед нами линейный алгоритм. НО в момент покупки выпечки вы сталкиваетесь с выбором: какую выпечку купить. И ваш выбор зависит не только от вашего вкуса, но и от количества рублей в вашей кармане! Например, если у вас в кармане 50 рублей, то вы не сможете купить пиццу за 90 рублей, но сможете купить пирожное за 30 рублей. А если не хватит рублей на пирожное, то останетесь без обеда. Изобразим этот пример в виде блок-схемы:

На алгоритмическом языке данный пример можно представить в следующем виде:

Если денег>50 {
   вы сможете купить пиццу
}
Иначе если денег>30{
   вы сможете купить пирожное
}
иначе{
   вы остались без обеда
}

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

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

money = int( input() )
if money >= 50:
    print('вы сможете купить пиццу')

В Питоне вместо фигурных скобок используется двоеточие. Обособление вложенного кода, то есть тела оператора, достигается за счет отступов. В программировании принято делать отступ равным четырем пробелам. Можно использовать клавишу табуляции (Tab) на клавиатуре.

Структуру программы можно изобразить следующим образом:

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

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

Приведем несколько примеров реализации ветвления на языке python. Сначала рассмотрим пример неполного ветвления. В этом случае если условный оператор возвращает ложное значение, то поток выполнения программы сразу "возвращается в основную ветку".

money = int( input() ) #с клавиатуры ввели количество денег
if money >= 50: #если денег больше или равно 50, то текстовой переменной присваиваем значение "вы сможете купить пиццу"
    buy = 'вы сможете купить пиццу'
print(buy)

Для приведенного выше примера, изобразим блок-схему. Данная форма называется неполной формой ветвления:

Синтаксис оператора if выглядит так.

if выражение:
    инструкция_1
    инструкция_2
    ...
    инструкция_n

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

money = int( input() ) #с клавиатуры ввели количество денег
if money >= 50: #если денег больше или равно 50, то текстовой переменной присваиваем значение "вы сможете купить пиццу"
    buy = 'вы сможете купить пиццу'
else:
    buy = 'вы НЕ сможете купить пиццу' #ИНАЧЕ текстовой переменной присваиваем значение "вы НЕ сможете купить пиццу"
print(buy)

Для приведенного выше примера, изобразим блок-схему. Данная форма называется полной формой ветвления:

Синтаксис оператора if-else выглядит так.

if выражение:
    инструкция_1
    инструкция_2
    ...
    инструкция_n
else:
    инструкция_a
    инструкция_b
    ...
    инструкция_x

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

money = int( input() ) #с клавиатуры ввели количество денег
if money >= 50: #если денег больше или равно 50, то текстовой переменной присваиваем значение "вы сможете купить пиццу"
    buy = 'вы сможете купить пиццу'
elif money >= 30:#ИНАЧЕ ЕСЛИ денег больше или равно 30, то текстовой переменной присваиваем значение "вы сможете купить пирожное"
    buy = 'вы сможете купить пирожное'
else:
    buy = 'вы остались без обеда' #ИНАЧЕ текстовой переменной присваиваем значение "вы остались без обеда"
print(buy)

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

 

Синтаксис оператора if-elif-else выглядит так.

if выражение_1:
    инструкции_(блок_1)
elif выражение_2:
    инструкции_(блок_2)
elif выражение_3:
    инструкции_(блок_3)
else:
    инструкции_(блок_4)

В приведенных примерах обратите внимание на то, где ставится знак двоеточие ":", где ставятся отступы. В языке программирования python это очень важно.

Оператор if является началом условной конструкции. Далее идёт условие, которое возвращает логическое значение True (истина) или False (ложь). Завершается условие символом «двоеточие». Затем — обязательный отступ в четыре пробела, он показывает, что строки объединяются в один блок. Отступ аналогичен использованию фигурных скобок или ключевых слов begin и end в других языках программирования.

Тело условной конструкции может содержать одно или несколько выражений (строк). По завершении тела может идти следующее условие, которое начинается с оператора elif (сокращение от else if — «иначе если»). Оно проверяется только в случае, если предыдущее условие не было истинным.

Синтаксис в elif аналогичен if. Операторов elif для одного блока условного оператора может быть несколько, а может не быть совсем. Последним идёт оператор else, который не содержит условия, а выполняется, только если ни одно из предыдущих условий в if и elif не выполнилось. Оператор else не является обязательным.

В качестве условия может выступать результат операции сравнения:

  • > (больше);
  • >= (больше или равно);
  • < (меньше);
  • <= (меньше или равно);
  • == (равно);
  • != (не равно).

Для записи сложных условий можно применять логические операции:

  • and — логическое «И» для двух условий. Возвращает True, если оба условия истинны, иначе возвращает False;
  • or — логическое «ИЛИ» для двух условий. Возвращает False, если оба условия ложны, иначе возвращает True;
  • not — логическое «НЕ» для одного условия. Возвращает False для истинного условия, и наоборот.

Для закрепления пройденного материалы, выполните тест!

Задачи для самостоятельной работы.

Задача 1. Написать программу, которая вычисляет арифметический квадратный корень. В программе необходимо проверить все исключения.
Задача 2. Написать программу, которая ищет максимальное число среди 4 чисел.
Задача 3. Назовем число Mami – разность между максимальным и минимальным числами среди введенных с клавиатуры целых чисел. Написать программу, которая ищет Mami среди 5 чисел.
Задача 4. Даны три числа, которые пользователь вводит с клавиатуры. Написать программу, которая выводит эти числа в порядке возрастания.
Задача 5. Написать программу, которая в зависимости от ввода целого числа от 1 до 7 выводит его день недели. Проверьте в программе все исключения (ввод отрицательного числа и числа больше 7).
Задача 6. Алена решила сходить в кино. Но в ее городском кинотеатре было всего три сеанса, которые имеют возрастные ограничения. Фильм №1 подходит для возраста от 0 до 13; Фильм №2 подходит для возраста от 14 до 17; Фильм № 3 подходит для возраста от 18 и старше. Задача 7. Напишите программу, которая определит, на какой фильм можно сходить Алене в зависимости от ее возраста. Программа получает на вход целое число (возраст Алены). Программа должна вывести номер фильма, на который может сходить Алена. Помните, что пользователь может некорректно ввести отрицательный возраст. Проверьте в программе такое событие.
Задача 8. В программу вводится натуральное двухзначное число. Напишите программу, которая выполняет следующие действия: если число четное, то необходимо увеличить последнюю цифру в два раза и сложить ее с первой цифрой; если число нечетное, то необходимо поменять местами цифры. Например, при вводе числа 16, результатом будет являться число 13 (6*2 = 12 -> 1+12 = 13), а при вводе числа 45, результатом будет являться число 54.
Задача 9. По длинам трех отрезков, введенных пользователем, определить возможность существования треугольника, составленного из этих отрезков. Если такой треугольник существует, то определить, является ли он разносторонним, равнобедренным или равносторонним.
Задача 10. Найти корни квадратного уравнения и вывести их на экран, если они есть. Если корней нет, то вывести сообщение об этом. Конкретное квадратное уравнение определяется коэффициентами a, b, c, которые вводит пользователь.