Как отступать
Не смешивайте пробелы и символы табуляции в отступах, поскольку не на всех плат- формах это работает корректно. Я настоятельно рекомендую вам использовать одиночную
табуляцию или четыре пробела для каждого уровня отступа.
Выберите какой-нибудь один из этих стилей отступа. Но что ещё более важно, это ис- пользовать выбранный стиль постоянно, а также соблюдать стиль редактируемых вами файлов. Т.е. когда вы пишете новый файл, используйте только один ваш любимый стиль,
а если в редактируемом вами файле для отступов уже используются, скажем, символы та- буляции, то и вы используйте в этом файле символы табуляции для отступов.
Хорошие редакторы, такие как Komodo Edit, будут делать это автоматически.
Замечание для программистов на статических языках программирования
Python всегда будет использовать отступы для выделения блоков и никогда не будет ис- пользовать скобки. Введите from __future__ import braces
, чтобы узнать больше.
7.10. Отступы
45
A Byte of Python (Russian), Версия 2.02 7.11 Резюме
Теперь, когда мы прошли через множество жизненно важных мелочей, можно перейти к более интересным вещам – таким как управляющие конструкции. Но сначала как следует освойтесь с прочитанным в настоящей главе.
7.11. Резюме
46
Операторы и выраженияБольшинство предложений (логических строк) в программах содержат
выражения. Про- стой пример выражения:
2 + 3
. Выражение можно разделить на операторы и операнды.
Операторы – это некий функционал, производящий какие-либо действия, который мо- жет быть представлен в виде символов, как например
+
, или специальных зарезервиро- ванных слов. Операторы могут производить некоторые действия над данными, и эти дан- ные называются
операндами. В нашем случае
2
и
3
– это операнды.
8.1 Операторы
Кратко рассмотрим операторы и их применение:
Обратите внимание, вычислить значения выражений,
данных в примерах, можно так- же используя интерпретатор интерактивно. Например, для проверки выражения
2 + 3
воспользуйтесь интерактивной командной строкой интерпретатора Python:
>>>2
+
3 5
>>>3
*
5 15
Операторы и их применениеОператор
Название
Объяснение
Примеры
+
Сложение Суммирует два объекта
3 + 5
даст
8
;
'a' + 'b'
даст 'ab'
-
Вычита- ние
Даёт разность двух чисел; если первый операнд отсутствует, он считается равным нулю
-5.2
даст отрицательное число, а
50 -
24
даст
26 47
A Byte of Python (Russian), Версия 2.02
Оператор
Название
Объяснение
Примеры
*
Умноже- ние
Даёт произведение двух чисел или возвращает строку,
повторённую заданное число раз.
2 * 3
даст
6
'la' * 3
даст 'lalala'
**
Возведе- ние в степень
Возвращает число х
,
возведённое в степень y
3 ** 4
даст
81
(т.е.
3 * 3 * 3 * 3
)
/
Деление
Возвращает частное от деления x
на y
4 / 3
даст
1.3333333333333333
//
Целочис- ленное деление
Возвращает неполное частное от деления
4 // 3
даст
1
-4 // 3
даст
-2
%
Деление по модулю
Возвращает остаток от деления
8 % 3
даст
2
-25.5 % 2.25
даст
1.5
<<
Сдвиг влево
Сдвигает биты числа влево на заданное количество позиций.
(Любое число в памяти компьютера представлено в виде битов - или двоичных чисел, т.е. 0 и 1)
2 << 2
даст
8
. В двоичном виде
2
представляет собой
10
. Сдвиг влево на 2
бита даёт
1000
, что в десятичном виде означает
8
>>
Сдвиг вправо
Сдвигает биты числа вправо на заданное число позиций.
11 >> 1
даст
5
. В двоичном виде
11
представляется как
1011
, что будучи смещённым на 1 бит вправо, даёт
101
, а это, в свою очередь, не что иное как десятичное
5
&
Побито- вое
И
Побитовая
операция И над числами5 & 3
даёт
1
8.1. Операторы48
A Byte of Python (Russian), Версия 2.02
Оператор
Название
Объяснение
Примеры
|
Побито- вое
ИЛИ
Побитовая операция ИЛИ
над числами
5 | 3
даёт
7
^
Побито- вое
ИСКЛЮ-
ЧИТЕЛЬ-
НО
ИЛИ
Побитовая операция ИС-
КЛЮЧИТЕЛЬНО
ИЛИ
5 ^ 3
даёт
6
Побито- вое
НЕ
Побитовая операция НЕ
для числа x
соответствует
-(x+1)
5
даёт
-6
<
Меньше
Определяет,
верно ли, что x
меньше y
. Все операторы сравнения возвращают
True или
False
1
Обратите внимание на заглавные буквы в этих словах.
5 < 3
даст
False
,
а
3 < 5
даст
True
Можно составлять произвольные цепочки сравнений:
3 < 5 < 7
даёт
True
>
Больше
Определяет,
верно ли, что x
больше y
5 > 3
даёт
True
. Если оба операнда - числа, то перед сравнением они оба преобразуются к одинаковому типу. В
противном случае всегда возвращается
False
<=
Меньше или равно
Определяет,
верно ли, что x
меньше или равно y
x = 3; y = 6; x <= y даёт
True
>=
Больше или равно
Определяет,
верно ли, что x
больше или равно y
x = 4; y = 3; x >= 3
даёт
True
8.1. Операторы
49
A Byte of Python (Russian), Версия 2.02
Оператор
Название
Объяснение
Примеры
==
Равно
Проверяет,
одинаковы ли объекты x = 2; y = 2; x == y даёт
True x =
'str'; y = 'stR'; x == y даёт
False x = 'str'; y = 'str'; x == y даёт
True
!=
Не равно
Проверяет,
верно ли, что объекты не равны x = 2; y = 3; x != y даёт
True not
Логиче- ское
НЕ
Если x
равно
True
, оператор вернёт
False
Если же x
равно
False
, получим
True x = True; not x даёт
False and
Логиче- ское
И
x and y даёт
False
, если x
равно
False
, в противном случае возвращает значение y
x = False; y = True; x and y возвращает
False
, поскольку x равно
False
. В этом случае Python не станет проверять значение y
, так как уже знает,
что левая часть выражения „and“
равняется
False
, что подразумевает, что и всё выражение в целом будет равно
False
, независимо от значений всех остальных операндов. Это называется укороченной оценкой булевых
(логических) выражений.
or
Логиче- ское
ИЛИ
Если x
равно
True
, в результате получим
True
, в противном случае получим значение y
x = True; y = False; x or y даёт
True
. Здесь также может производиться укороченная оценка выражений.
1
«True» - англ. «Верно (Правда)»; «False» - англ. «Ошибочно (Ложь)». (прим. перев.)
8.1. Операторы
50
A Byte of Python (Russian), Версия 2.02 8.1.1 Краткая запись мат. операций и присваивания
Зачастую результат проведения некой математической операции необходимо присвоить переменной, над которой эта операция производилась. Для этого существуют краткие формы записи выражений:
Вы можете записать:
a
=
2
; a
=
a
*
3
в виде:
a
=
2
; a
*=
3
Обратите внимание, что выражения вида «
переменная = переменная операция выражение
» принимает вид «
переменная операция = выражение
».
8.2 Порядок вычисления
Если имеется выражение вида
2 + 3 * 4
, что производится раньше: сложение или умно- жение? Школьный курс математики говорит нам, что умножение должно производиться в первую очередь. Это означает, что оператор
умножения имеет более высокий приори- тет, чем оператор сложения.
Следующая таблица показывает приоритет операторов в Python, начиная с самого низ- кого (самое слабое связывание) и до самого высокого (самое сильное связывание). Это означает, что в любом выражении Python сперва вычисляет операторы и выражения, рас- положенные внизу таблицы, а затем операторы выше по таблице.
Эта таблица взята из
Справочника по языку Python (англ.)
и приводится здесь для пол- ноты описания. На практике лучше использовать скобки для группировки операторов и операндов, чтобы в явном виде указать порядок вычисления выражений. Заодно это об- легчит чтение программы. Более подробно см. в разделе
Изменение порядка вычисленияниже.
8.2. Порядок вычисления51
A Byte of Python (Russian), Версия 2.02
Приоритет операторов
Оператор
Описание lambda лямбда-выражение or
Логическое «ИЛИ»
and
Логическое «И»
not x
Логическое «НЕ»
in
,
not in
Проверка принадлежности is
,
is not
Проверка тождественности
<
,
<=
,
>
,
>=
,
!=
,
==
Сравнения
|
Побитовое «ИЛИ»
^
Побитовое «ИСКЛЮЧИТЕЛЬНО ИЛИ»
&
Побитовое «И»
<<
,
>>
Сдвиги
+
,
-
Сложение и вычитание
*
,
/
,
//
,
%
Умножение, деление, целочисленное деление и остаток от де- ления
+x
,
-x
Положительное, отрицательное
x
Побитовое НЕ
**
Возведение в степень x.attribute
Ссылка на атрибут x[индекс]
Обращение по индексу x[индекс1:индекс2]
Вырезка f(аргументы ...)
Вызов функции
(выражения, ...)
Связка или кортеж
2
[выражения, ...]
Список
{ключ:данные,
...}
Словарь
Операторы, о которых мы не упомянули, будут объяснены в дальнейших главах.
В этой таблице операторы с равным приоритетом расположены в одной строке. Напри- мер,
+
и
- имеют равный приоритет.
2
«tuple» - англ. «кортеж» (прим. перев.)
8.2. Порядок вычисления
52
A Byte of Python (Russian), Версия 2.02 8.3 Изменение порядка вычисления
Для облегчения чтения выражений можно использовать скобки. Например,
2 + (3 * 4)
определённо легче понять, чем
2 + 3 * 4
, которое требует знания приоритета операто- ров. Как и всё остальное, скобки нужно использовать разумно (не перестарайтесь) и избе- гать излишних, как в
(2 + (3 * 4))
Есть ещё одно преимущество в использовании скобок – они дают возможность изме- нить порядок вычисления выражений. Например, если сложение необходимо произвести прежде умножения, можно записать нечто вроде
(2 + 3) * 4 8.4 Ассоциативность
Операторы обычно обрабатываются слева направо. Это означает, что операторы с равным приоритетом будут обработаны по порядку от левого до правого. Например,
2 + 3 + 4
обрабатывается как
(2 + 3) + 4 8.5 Выражения
Пример (сохраните как expression.py
):
length
=
5
breadth
=
2
area
=
length
*
breadth print
(
'Площадь равна'
, area)
print
(
'Периметр равен'
,
2
*
(length
+
breadth))
Вывод:$ python expression.py
Площадь равна 10
Периметр равен 14
Как это работает:Длина и ширина прямоугольника хранятся в переменных length и
breadth соответственно. Мы используем их для вычисления периметра и площади прямоугольника при помощи выражений. Результат выражения length *
breadth сохраняется в переменной area
, после чего выводится на экран функцией print
. Во втором случае мы
напрямую подставляем значение вы- ражения2 * (length + breadth)
в функцию print
8.3. Изменение порядка вычисления53
A Byte of Python (Russian), Версия 2.02
Также обратите внимание, как Python «красиво печатает» результат. Несмот- ря на то, что мы не указали пробела между 'Площадь равна'
и перемен- ной area
, Python подставляет его за нас, чтобы получить красивый и понят- ный вывод. Программа же остаётся при этом легкочитаемой (поскольку нам не нужно заботиться о пробелах между строками, которые мы выводим). Это пример того, как Python облегчает жизнь программисту.
8.6 Резюме
Мы увидели, как пользоваться операторами, операндами и выражениями. Это основные строительные блоки любой программы. Далее мы увидим, как это применить на практи- ке.
8.6. Резюме
54
Поток командВ программах, которые мы до сих пор рассматривали, последовательность команд всегда выполнялась Python по порядку строго сверху вниз. А что, если нам необходимо изменить поток выполняющихся команд? Например, если требуется, чтобы программа принимала некоторое решение и выполняла различные действия в зависимости от ситуации; ска- жем, печатала «Доброе утро» или «Добрый вечер» в зависимости от времени суток.
Как вы уже, наверное, догадались, этого можно достичь при помощи операторов управ- ления потоком. В Python есть три оператора управления потоком:
if
,
for и
while
9.1 Оператор if
Оператор if используется для проверки условий:
если1
условие верно
2
, выполняется блок выражений (называемый «if-блок»),
иначе3
выполняется другой блок выражений (назы- ваемый «else-блок»). Блок «else» является необязательным.
Пример: (сохраните как if.py
)
number
=
23
guess
=
int
(
input
(
'Введите целое число : '
))
ifguess
==
number:
print
(
'Поздравляю, вы угадали,'
)
# Начало нового блокаprint
(
'(хотя и не выиграли никакого приза!)'
)
# Конец нового блокаelifguess
<
number:
print
(
'Нет, загаданное число немного больше этого.'
)
# Ещё один блок# Внутри блока вы можете выполнять всё, что угодно ...else:
print
(
'Нет, загаданное число немного меньше этого.'
)
# чтобы попасть сюда, guess должно быть больше, чем number(продолжение на следующей странице)
1
if –
англ. «если» (
прим.перев.)
2
Соответствует булевому значению
True
(
прим.перев.)
3
else –
англ. «иначе», «в противном случае» (
прим.перев.)
55
A Byte of Python (Russian), Версия 2.02
(продолжение с предыдущей страницы)
print
(
'Завершено'
)
# Это последнее выражение выполняется всегда после выполнения оператора if
Вывод:
$ python if.py
Введите целое число : 50
Нет, загаданное число немного меньше этого.
Завершено
$ python if.py
Введите целое число : 22
Нет, загаданное число немного больше этого.
Завершено
$ python if.py
Введите целое число : 23
Поздравляю, вы угадали,
(хотя и не выиграли никакого приза!)
Завершено
Как это работает:
В этой программе мы принимаем варианты от пользователя и проверяем, сов- падают ли они с заранее заданным числом. Мы устанавливаем переменной number значение любого целого числа, какого хотим. Например,
23
. После этого мы принимаем вариант числа от пользователя при помощи функции input()
. Функции – это всего-навсего многократно используемые фрагмен- ты программы. Мы узнаем о них больше в
следующей главе
Мы передаём встроенной функции input строку, которую она выводит на экран и ожидает ввода от пользователя. Как только мы ввели что-нибудь и на- жали клавишу
Enter
, функция input()
возвращает строку, которую мы вве- ли. Затем мы преобразуем полученную строку в число при помощи int()
,
и сохраняем это значение в переменную guess
. Вообще-то,
int
– это класс,
но на данном этапе вам достаточно знать лишь, что при помощи него можно преобразовать строку в целое число (предполагая, что строка содержит целое число).
Далее мы сравниваем число, введённое пользователем, с числом, которое мы выбрали заранее. Если они равны, мы печатаем сообщение об успехе. Обра- тите внимание, что мы используем соответствующие уровни отступа, чтобы указать Python, какие выражения относятся к какому блоку. Вот почему отсту- пы так важны в Python. Я надеюсь, вы придерживаетесь правила «постоянных отступов», не так ли?
Обратите внимание, что в конце оператора if стоит двоеточие – этим мы по-
9.1. Оператор if
56
A Byte of Python (Russian), Версия 2.02
казываем, что далее следует блок выражений.
После этого мы проверяем, верно ли, что пользовательский вариант числа меньше загаданного, и если это так, мы информируем пользователя о том,
что ему следует выбирать числа немного больше этого. Здесь мы использо- вали выражение elif
, которое попросту объединяет в себе два связанных if else-if else выражения в одно выражение if-elif-else
. Это облегчает чтение программы, а также не требует дополнительных отступов.
Выражения elif и
else также имеют двоеточие в конце логической строки,
за которым следуют соответствующие блоки команд (с
соответствующим чис- лом отступов, конечно).
Внутри if-блока оператора if может быть другой оператор if и так далее – это называется вложенным
4
оператором if
Помните, что части elif и
else не обязательны. Минимальная корректная запись оператора if такова:
if True:
print
(
'Да, это верно.'
)
После того, как Python заканчивает выполнение всего оператора if вместе с его частями elif и
else
, он переходит к следующему выражению в блоке,
содержащем этот оператор if
. В нашем случае это основной блок программы
(в котором начинается выполнение программы), а следующее выражение –
это print('Завершено')
. После этого Python доходит до конца программы и просто выходит из неё.
Хотя это и чрезвычайно простая программа, я указал вам на целый ряд вещей, которые стоит взять на заметку. Всё это довольно легко (даже удивительно легко для тех из вас, кто пришёл из мира C/C++). Поначалу вам придётся держать все эти вещи в памяти, но после некоторой практики вы привыкнете, и они вам покажутся вполне «естественными».
Замечание для программистов на C/C++В Python нет оператора switch
. Однако, при помощи конструкции if..elif..else мож- но достичь того же самого (а в некоторых случаях можно даже использовать
словарь, что- бы сделать это быстро).
4
nested –
англ. «вложенный» (
прим.перев.)
9.1. Оператор if57
A Byte of Python (Russian), Версия 2.02 9.2 Оператор while
Оператор while позволяет многократно выполнять блок команд до тех пор, пока выпол- няется некоторое условие. Это один из так называемых
операторов цикла. Он также может иметь необязательный пункт else