Интерпретатор выведет эти числа как десятичные. Попробуем воспользоваться каждой из систем счисления. Первой выберем старое доброе десятичное число 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.0, когда оно смешивается с целыми числами или числами с плавающей точкой, а True — как 1 или 1.0:
>>> True + 2
3
>>> False + 5.0
5.0
Насколько объемен тип int?
В Python 2 размер переменной типа int был ограничен 32 битами. Этого было достаточно для того, чтобы сохранить любое целое число в диапазоне от –2 147 483 648 до 2 147 483 647.
Для переменных типа long выделялось еще больше места — 64 бита, что позволяло хранить значения в диапазоне от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. В Python 3 тип long отсутствует, а переменная типа int может быть любого размера — даже больше 64 бит. Поэтому вы можете выполнить арифметические действия наподобие следующих (10**100 называется гугол (googol), компания Google называлась так до того, как решила сменить свое название на более простое):