Следующая: , Предыдущая: arithm, Вверх: Top


5 Условная инструкция

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

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

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

     x=input()    # Вводим x с клавиатуры
     y=input()    # Вводим y с клавиатуры
     if x>y:      # Ветвление в зависимости от условия x>y
        print x   # Напечатаем x если условие истино
     else:
        print y   # Напечатаем y если условие ложно
     print "наибольшее из двух чисел" # Эта инструкция будет выполнена всегда

Эта программа проверяет, какое из двух введенных чисел больше (x>y). Если это условие истино, то печатается значение x, иначе значение y. Таким образом, данная программа напечатает наибольшее из двух введенных чисел.

В общем случае синтаксис инструкции ветвления таков:

     if условие:
        инструкция11
        ...
        инструкция1n
     else:
        инструкция21
        ...
        инструкция2n

Работает инструкция ветвления так. Сначала проверяется условие. Если оно истинно, то выполняется та последовательность инструкций, которая находится между ключевыми словами if и else (будем называть эту последовательность инструкций if-блоком). Если же условие ложно, то вместо этого блока инструкций выполняется та последовательность, которая идет после ключевого слова else (else-блок). После завершения выполнения if-блока или else-блока, то есть независимо от условия, начинают выполняться инструкции, следующие после else-блока (в рассмотренном примере это последняя инструкция print).

А как Питон определяет, где заканчивается else-блок и начинаются те инструкции, которые будут выполнены независимо от проверяемого условия, то есть в каком месте наши пути выполнения сливаются? Это определяется по величине отступа: перед всеми инструкциями в if-блоке и else-блоке следует поставить один или несколько пробелов, выделяя при помощи сдвига вправо блок от остальной программы, причем число пробелов перед всеми инструкциями в блоке должно быть одинаковым. Первая же инструкция после else-блока должна начинаться с той же позиции, что и ключевые слова if и else. И ни в коем случае не следует забывать про двоеточия после инструкций if и else.

Условия

В простейшем случае условия имеют следующий вид:

     выражение1 оператор выражение2

где выражение1 и выражение2 – некоторые арифметические выражения (то есть переменные, арифметические операторы, вызовы функций, то есть все, что встречалось нам в предыдущих листках), а оператор может быть следующим оператором отношения:

<
меньше
>
больше
<=
меньше или равно
>=
больше или равно
==
равно
!=
неравно

Например, условие x<=2**(0.5) означает "значение переменной x не меньше корня из 2", а условие 2*x!=y означает "удвоенное значение переменной x не равно значению переменной y".

Будьте аккуратны: оператор == (два знака равно) — это проверка на равенство двух выражений, а оператор = (один знак равно) — это присваивание переменной нового значения и использовать его в условии инструкции if нельзя.

Неполная инструкция ветвления

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

     if x%2==0:
        print "even"

напечатает слово even, если x — четное число и не напечатает ничего в противном случае. Такая инструкция ветвления называется неполной.

Инструкция множественного ветвления

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

     x=input()
     if x==1:
        print "один"
     elif x==2:
        print "два"
     elif x==3:
        print "три"
     else:
        print "другое число"

В множественном ветвлении должна быть одна инструкция if с последующим блоком, одна или несколько инструкций elif с последующими блоками и, возможно, инструкция else с последующим блоком. Все условия проверяются одно за другим и будет выполнен блок инструкций, который следует за условием, значение которого будет истинно. Если истинными окажутся несколько условий, то выполнится только тот блок инструкций, который следует после первого из этих условий (а остальные условия даже не будут проверяться). Если же все условия будут ложны, то выполнится else-блок, если он есть.

Вложенные условные инструкции

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

     if условие1:
        ...
        if условие2:
           ...
        else:
           ...
        ...
     else:
        ...

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

Пример. У нас есть две ненулевые переменные x и y, мы хотим определить, в какой четверти координатной плоскости находится точка с координатами (x,y).

     if x>0:
         print "x>0"
         if y>0:
             print "y>0"
             print "Первая четверть"
         else:
             print "y<0"
             print "Четвертая четверть"
     else:
         print "x<0"
         if y>0:
             print "y>0"
             print "Вторая четверть"
         else:
             print "y<0"
             print "Третья четверть"

Упражнения

  1. Дано число x. Напечатайте его абсолютную величину (модуль).
  2. Даны два целых числа a и b. Напечатайте остаток от деления a на b или фразу "делится нацело", если a делится на b.
  3. Даны два числа x и у. Определите, находится ли точка с координатами (x,y) в единичном круге (круге радиуса 1 c центром в начале координат).
  4. Даны два ненулевых числа. Определите, совпадают ли у них знаки или нет.
  5. Даны три действительных числа a, b, c (a!=0). Определите, сколько корней имеет уравнение ax2+bx+c=0 и найдите эти корни.
  6. Даны три числа, каждое из которых может быть либо 0, либо 1. Напечатайте то из двух чисел (0 или 1), которое встречается чаще среди введенных чисел.
  7. Даны три числа. Напечатайте наибольшее из них (программа должна выводить ровно одно число, то есть при вводе чисел 2, 3 и 3 программа должна вывести число 3).