Выбрать главу

>>>

Сравниваем выражения с помощью операторов if, elif и else

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

>>> disaster = True

>>> if disaster:

…·····print("Woe!")

… else:

…·····print("Whee!")

Woe!

>>>

Строки if и else в Python являются операторами, которые проверяют, является ли значение выражения (в данном случае переменной disaster) равным True. Помните, print() — это встроенная в Python функция для вывода информации, как правило, на ваш экран.

Если вы работали с другими языками программирования, обратите внимание на то, что при проверке if вам не нужно ставить скобки. Не нужно писать что-то вроде if (disaster == True). В конце строки следует поставить двоеточие (:). Если вы, как и я, иногда забываете ставить двоеточие, Python выведет сообщение об ошибке.

Каждая строка print() отделена пробелами под соответствующей проверкой. Я использовал четыре пробела для того, чтобы выделить каждый подраздел. Хотя вы можете использовать любое количество пробелов, Python ожидает, что внутри одного раздела будет применяться одинаковое количество пробелов. Рекомендованный стиль — PEP-8 (http://bit.ly/pep-8) — предписывает использовать четыре пробела. Не применяйте табуляцию или сочетание табуляций и пробелов — это мешает подсчитывать отступы.

Все выполненные в этом примере действия я объясню более детально далее в текущей главе.

1. Присвоили булево значение True переменной disaster.

2. Произвели условное сравнение с помощью операторов if и else, выполняя разные фрагменты кода в зависимости от значений переменной disaster.

3. Вызвали функцию print(), чтобы вывести текст на экран.

Можно организовывать проверку в проверке столько раз, сколько вам нужно:

>>> furry = True

>>> small = True

>>> if furry:

…·····if smalclass="underline"

…·········print("It's a cat.")

…·····else:

…·········print("It's a bear!")

… else:

…·····if smalclass="underline"

…·········print("It's a skink!")

…·····else:

…·········print("It's a human. Or a hairless bear.")

It's a cat.

В Python отступы определяют, какие разделы if и else объединены в пару. Наша первая проверка обращалась к переменной furry. Поскольку ее значение равно True, Python переходит к выделенной таким же количеством пробелов проверке if small. Поскольку мы указали значение переменной small равным True, проверка вернет результат True. Это заставит Python вывести на экран строку It's a cat.

Если необходимо проверить более двух вариантов, используйте операторы if, elif (это значит else if — «иначе если») и else:

>>> color = "puce"

>>> if color == "red":

…·····print("It's a tomato")

… elif color == "green":

…·····print("It's a green pepper")

… elif color == "bee purple":

…·····print("I don't know what it is, but only bees can see it")

… else:

…·····print("I've never heard of the color", color)

I've never heard of the color puce

В предыдущем примере мы проверяли равенство с помощью оператора ==. В Python используются следующие операторы сравнения:

• равенство (==);

• неравенство (!=);

• меньше (<);

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

• больше (>);

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

• включение (in …).

Эти операторы возвращают булевы значения True или False. Взглянем на то, как они работают, но сначала присвоим значение переменной x:

>>> x = 7

Теперь выполним несколько проверок:

>>> x == 5

False

>>> x == 7

True

>>> 5 < x

True

>>> x < 10

True

Обратите внимание на то, что для проверки на равенство используются два знака «равно» (==); помните, что один знак «равно» применяется для присваивания значения переменной.

Если вам нужно выполнить несколько сравнений одновременно, можете использовать булевы операторы and, or и not, чтобы определить итоговый двоичный результат.

Булевы операторы имеют более низкий приоритет, нежели фрагменты кода, которые они сравнивают. Это значит, что сначала высчитывается результат фрагментов, а затем они сравниваются. В данном примере из-за того, что мы устанавливаем значение х равным 7, проверка 5 < х возвращает значение True и проверка х < 10 также возвращает True, поэтому наше выражение преобразуется в True and True: