Синтаксис условного оператора

Все ранее рассматриваемые программы имели линейную структуру: все инструкции выполнялись последовательно, одна за одной, при этом каждая записанная инструкция обязательно выполняется. Теперь поставим себе другую задачу. Допустим, мы хотим по данному числу x определить его абсолютную величину (модуль). Программа должна напечатать значение переменной x, если x >= 0 (так в программировании обозначается операция сравнения ≥, см. часть операции сравнения) или же величину -x в противном случае. Линейная структура программы нарушается: в зависимости от справедливости условия x >= 0 должна быть выведена одна или другая величина. Соответствующий фрагмент программы на Python имеет вид:

x = int(input())
if x >= 0:
    print(x)
else:
    print(-x)

В этой программе используется условная инструкция if (если). После слова if указывается проверяемое условие (x >= 0), завершающееся двоеточием. После этого идет блок (последовательность) инструкций, который будет выполнен, если условие истинно, в нашем примере это вывод на экран величины x. Затем идет слово else (иначе), также завершающееся двоеточием, и блок инструкций, который будет выполнен, если проверяемое условие неверно, в данном случае будет выведено значение -x. Итак, условный оператор имеет следующий синтаксис (правила записи):

if Условие:
    Блок инструкций 1
else:
    Блок инструкций 2

Блок инструкций 1 будет выполнен, если Условие истинно. Если Условие ложно, будет выполнен Блок инструкций 2.

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

if x < 0:
    x = -x
print(x)

В этом примере переменной x будет присвоено значение -x, но только в том случае, когда x < 0. А вот инструкция print(x) будет выполнена всегда, независимо от проверяемого условия.

Для выделения блока инструкций, относящихся к инструкции if или else, в языке Python используются отступы. Все инструкции, которые относятся к одному блоку, должны иметь равную величину отступа, то есть одинаковое число пробелов в начале строки. Рекомендуется использовать отступ в 4 пробела и не рекомендуется использовать в качестве отступа символ табуляции. Это одно из существенных отличий синтаксиса языка Python от синтаксиса большинства языков, в которых блоки выделяются специальными словами, например, нц ... кц в Кумире, begin ... end в Паскале или фигурными скобками в Си.

Вложенные условные инструкции. Комментарии

Внутри условных инструкций можно использовать любые инструкции языка Python, в том числе и условную инструкцию. Получаем вложенное ветвление – после одной развилки в ходе исполнения программы появляется другая развилка. При этом вложенные блоки имеют отступ уже относительно “своей” условной инструкции. Покажем это на примере программы, которая по данным ненулевым числам x и y определяет, в какой из четвертей координатной плоскости находится точка (x, y):

x = int(input())
y = int(input())
# Определим, в какой четверти находится точка с координатами (x,y)
if x > 0:
    if y > 0: # x>0, y>0
        print("Первая четверть")
    else: # x>0, y<0
        print("Четвертая четверть")
else:
    if y > 0: # x<0, y>0
        print("Вторая четверть")
    else: # x<0, y<0
        print("Третья четверть")

В этом примере мы также использовали комментарии – дополнительный текст, который записывается, чтобы человеку было проще прочесть и разобраться в программе, и который интерпретатор игнорирует (не исполняет). Комментариями в Питоне является символ # и весь текст после этого символа до конца строки.

Операции сравнения. Тип данных bool

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

Оператор Описание
< Меньше — условие верно, если первый операнд меньше второго.
> Больше — условие верно, если первый операнд больше второго.
<= Меньше или равно.
>- Больше или равно.
== Равенство. Условие верно, если два операнда равны.
!= Неравенство. Условие верно, если два операнда неравны.

Обратите внимание, что знак = операцией сравнения не является!

Например, условие (x * x <= 1000) означает “значение x * x меньше или равно 1000”, а условие (2 * x != y) означает “удвоенное значение переменной x не равно значению переменной y”. Операторы сравнения в языке Python можно объединять в цепочки (в отличие от большинства других языков программирования, где для этого нужно использовать логические связки!), например, a == b == c или 1 <= x <= 10. Операции сравнения возвращают значения специального логического типа bool. Значения логического типа могут принимать одно из двух значений: True (истина) или False (ложь). Если преобразовать логическое True к типу int, то получится 1, а преобразование False даст 0. При обратном преобразовании число 0 преобразуется в False, а любое ненулевое число в True. При преобразовании str в bool пустая строка преобразовывается в False, а любая непустая строка в True.

Логические операции

Иногда нужно проверить одновременно не одно, а несколько условий. Например, проверить, является ли данное число чётным, можно при помощи условия (n % 2 == 0) (остаток от деления n на 2 равен 0). А если необходимо проверить, что два данных целых числа n и m являются четными, необходимо проверить справедливость обоих условий: n % 2 == 0 и m % 2 == 0, для чего их необходимо объединить при помощи оператора and (логическое И): n % 2 == 0 and m % 2 == 0.

В языке Python существуют стандартные логические операции: логическое И, логическое ИЛИ, логическое отрицание.

  • Логическое И является бинарной операцией (то есть операцией с двумя операндами: левым и правым) и имеет вид and. Операция and возвращает True тогда и только тогда, когда оба ее операнда имеют значение True.
  • Логическое ИЛИ является бинарной операцией и возвращает True тогда и только тогда, когда хотя бы один операнд равен True. Операция “логическое ИЛИ” имеет вид or.
  • Логическое НЕ (отрицание) является унарной (то есть с одним операндом) операцией и имеет вид not, за которым следует единственный операнд. Логическое НЕ возвращает True, если операнд равен False и наоборот.

Пример. Проверим, что хотя бы одно из чисел a или b оканчивается на 0:

if a % 10 == 0 or b % 10 == 0:

Проверим, что число a — положительное, а b — неотрицательное:

if a > 0 and not (b > 0):

Или можно вместо not (b < 0) записать (b >= 0).

Каскадные условные инструкции

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

x = int(input())
y = int(input())
if x > 0 and y > 0:
    print("Первая четверть")
elif x > 0 and y < 0:
    print("Четвертая четверть")
elif y > 0:
    print("Вторая четверть")
else:
    print("Третья четверть")

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

Последнее изменение: Суббота, 15 Август 2020, 02:34