… # октоторпом.
…
>>>
Однако если октоторп находится внутри текстовой строки, он становится простым символом #:
>>> 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: