8 страница из 93
Тема
а затем присваивает его переменной а, которая находится с левой стороны. Это гораздо быстрее и приятнее глазу, чем использование временной переменной.

Вы можете совместить арифметические операторы с присваиванием, размещая оператор перед знаком =. В этом примере выражение а — = 3 аналогично выражению а = а — 3:

>>> a = 95

>>> a — = 3

>>> a

92

Это выражение аналогично выражению а = а + 8:

>>> a += 8

>>> a

100

А это — выражению а = а * 2:

>>> a *= 2

>>> a

200

Здесь представлен пример деления с плавающей точкой, а = а / 3:

>>> a /= 3

>>> a

66.66666666666667

Присвоим значение 13 переменной а, а затем попробуем использовать сокращенный вариант а = а // 4 (целочисленное деление):

>>> a = 13

>>> a //= 4

>>> a

3

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

>>> 9 % 5

4

Вот так можно получить частное и остаток одновременно:

>>> divmod(9,5)

(1, 4)

В противном случае вам пришлось бы считать их по отдельности:

>>> 9 // 5

1

>>> 9 % 5

4

Только что вы увидели кое-что новое: функцию с именем divmod, в которую передаются целые числа 9 и 5, возвращающую двухэлементный результат, называемый кортежем. С кортежами вы познакомитесь в главе 3, а с функциями — в главе 4.

Приоритет операций

Рассмотрим, что получится, если ввести следующее:

>>> 2 + 3 * 4

Если выполнить сложение первым, 2 + 3 равно 5, а 5 * 4 равно 20. Но если выполнить первым умножение, 3 * 4 равно 12, а 2 + 12 равно 14. В Python, как и в большинстве других языков, умножение имеет больший приоритет, нежели сложение, поэтому вы увидите ответ, совпадающий со второй версией:

>>> 2 + 3 * 4

14

Как узнать приоритет той или иной операции? В приложении Е приводится огромная таблица, в которой перечислены все приоритеты, но я обнаружил, что на практике никогда не смотрю в эти правила. Гораздо проще добавить пару скобок, чтобы сгруппировать код и вычисления так, как нужно:

>>> 2 + (3 * 4)

14

Это поможет любому человеку, читающему код, точно определить его предназначение.

Системы счисления

Предполагается, что целые числа указываются в десятичной системе счисления, если только вы не укажете какую-либо другую. Вам может никогда не понадобиться использовать другие системы счисления, но иногда они будут встречаться в коде.

Как правило, у нас десять пальцев на руках и ногах (у одного из моих котов их немного больше, но он редко использует их для счета), поэтому мы считаем: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. После этого у нас заканчиваются цифры и мы переносим единицу на место десятки и ноль — на место единицы: 10 означает «одна десятка и ноль единиц». У нас нет одной цифры, которая представляла бы собой 10. Далее мы считаем: 11, 12… 19, переносим единицу, чтобы сделать 20 (две десятки и ноль единиц), и т. д.

Система счисления указывает, сколько цифр вы можете использовать до того, как перенести единицу. В двоичной (бинарной) системе счисления единственными цифрами являются и 1. Двоичные и 1 точно такие же, как и десятичные. Однако, если в этой системе сложить 1 и 1, вы получите 10 (одна десятичная двойка плюс ноль десятичных единиц).

В Python вы можете выразить числа в трех системах счисления помимо десятичной:

• 0b или 0B для двоичной системы (основание 2);

• 0o или 0O для восьмеричной системы (основание 8);

• 0x или 0X для шестнадцатеричной системы (основание 16).

Интерпретатор выведет эти числа как десятичные. Попробуем воспользоваться каждой из систем счисления. Первой выберем старое доброе десятичное число 10, которое означает «одна десятка и ноль единиц»:

>>> 10

10

Теперь возьмем двоичную (основание 2), что означает «одна (десятичная) двойка и ноль единиц»:

>>> 0b10

2

Восьмеричная (основание 8) означает «одна (десятичная) восьмерка и ноль единиц»:

>>> 0°10

8

Шестнадцатеричная (основание 16) означает «одна (десятичное) 16 и ноль единиц»:

>>> 0x10

16

Если вам интересно, какие «цифры» использует шестнадцатеричная система счисления, взгляните на них: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e и f. 0ха равно десятичной 10, а 0xf — десятичному 15. Добавьте 1 к 0xf, и вы получите 0х10 (десятичное 16).

Зачем использовать другие системы счисления, отличные от десятичной? Это полезно для битовых операций, которые описаны в главе 7 наряду с детальной информацией о преобразовании чисел из одной системы счисления в другую.

Преобразования типов

Для того чтобы изменить другие типы данных на целочисленный тип, следует использовать функцию int(). Она сохраняет целую часть числа и отбрасывает любой остаток.

Простейший тип данных в Python — булевы переменные, значениями этого типа могут быть только True или False. При преобразовании в целые числа они представляют собой значения 1 и 0:

>>> int(True)

1

>>> int(False)

0

Преобразование числа с плавающей точкой в целое число просто отсекает все, что находится после десятичной запятой[2]:

>>> int(98.6)

98

>>> int(1.0e4)

10000

Наконец, рассмотрим пример преобразования текстовой строки (со строками вы познакомитесь через несколько страниц), которая содержит только цифры и, возможно, знаки + и —:

>>> int('99')

99

>>> int('-23')

-23

>>> int('+12')

12

Преобразование целого числа в целое число ничего не меняет и совсем не вредит:

>>> int(12345)

12345

Если вы попробуете преобразовать что-то непохожее на число, сгенерируется исключение:

>>> int('99 bottles of beer on the wall')

Traceback (most recent call last):

··File "<stdin>", line 1, in <module>

ValueError: invalid literal for int() with base 10: '99 bottles of beer on the wall'

>>> int('')

Traceback (most recent call last):

··File "<stdin>", line 1, in <module>

ValueError: invalid literal for int() with base 10: ''

Текстовая строка в предыдущем примере начинается с корректных символов-цифр (99), но продолжается теми символами, которые функция int() обработать не может.


Мы рассмотрим исключения в главе 4. Пока нужно только помнить, что с помощью исключений Python извещает вас о том, что произошла ошибка, вместо того чтобы прервать выполнение программы, как поступают некоторые другие языки. Вместо того чтобы показывать вам лишь правильные примеры, я продемонстрирую множество вариантов исключений, чтобы вы знали, как поступает Python, когда что-то идет не так.


Функция int() будет создавать целые числа из чисел с плавающей точкой или строк, состоящих из цифр, но она не будет обрабатывать строки, содержащие десятичные точки или экспоненты:

>>> int('98.6')

Traceback (most recent call last):

··File "<stdin>", line 1, in <module>

ValueError: invalid literal for int() with base 10: '98.6'

>>> int('1.0e4')

Traceback (most recent call last):

··File "<stdin>", line 1, in <module>

ValueError: invalid literal for int() with base 10: '1.0e4'

Если вы смешаете численные значения, Python будет пытаться автоматически преобразовать их:

>>> 4 + 7.0

11.0

Булево значение False рассматривается как или 0.0, когда оно смешивается

Добавить цитату