Простой Python — страница 12 из 66

… # октоторпом.

>>>

Однако если октоторп находится внутри текстовой строки, он становится простым символом #:

>>> print("No comment: quotes make the # harmless.")

No comment: quotes make the # harmless.

Продлеваем строки с помощью символа \

Любая программа становится более удобочитаемой, если ее строки относительно короткие. Рекомендуемая (но не обязательная) максимальная длина строки равна 80 символам. Если вы не можете выразить свою мысль в рамках 80 символов, воспользуйтесь символом возобновления \. Просто поместите его в конце строки, и дальше Python будет действовать так, будто это все та же строка.

Например, если бы я хотел создать длинную строку из нескольких коротких, я мог бы сделать это пошагово:

>>> alphabet = ''

>>> alphabet += 'abcdefg'

>>> alphabet += 'hijklmnop'

>>> alphabet += 'qrstuv'

>>> alphabet += 'wxyz'

Или же за одно действие, использовав символ continuation:

>>> alphabet = 'abcdefg' + \

…······'hijklmnop' + \

…······'qrstuv' + \

…······'wxyz'

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

>>> 1 + 2 +

··File "", line 1

····1 + 2 +

··········^

SyntaxError: invalid syntax

>>> 1 + 2 + \

… 3

6

>>>

Сравниваем выражения с помощью операторов 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 small:

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

…·····else:

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

… else:

…·····if small:

…·········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:

>>> 5 < x and x < 10

True

Как указывается в подразделе «Приоритет операций» раздела «Числа» главы 2, самый простой способ избежать путаницы — использовать круглые скобки:

>>> (5 < x) and (x < 10)

True

Рассмотрим некоторые другие проверки:

>>> 5 < x or x < 10

True

>>> 5 < x and x > 10

False

>>> 5 < x and not x > 10

True

Если вы используете оператор and для того, чтобы объединить несколько проверок, Python позволит вам сделать следующее:

>>> 5 < x < 10

True

Это выражение аналогично проверкам 5 < x и x < 10. Вы также можете писать более длинные сравнения:

>>> 5 < x < 10 < 999

True

Что есть истина? Что, если элемент, который мы проверяем, не является булевым? Чем Python считает True и False?

Значение false не обязательно явно означает False. Например, к False приравниваются все следующие значения:

• булева переменная False;

• значение None;

• целое число 0;

• число с плавающей точкой 0.0;

• пустая строка (' ');

• пустой список ([]);

• пустой кортеж (());

• пустой словарь ({});

• пустое множество (set()).

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