Числа в python
Целые числа
Нельзя ставить ноль (0
) перед другими цифрами, ибо:
>>> 05
File "<stdin>", line 1
05
^
SyntaxError: invalid token
Положительные и отрицательные числа:
>>> 123
123
>>> +123
123
>>> -123
-123
При записи числа допускаются разделители в виде underscore _
, которые будут проигнорированы:
>>> 1_000_000
1000000
>>> 1_2_3
123
Системы счисления
Система счисления указывает, сколько цифр вы используете до того, как перенесете единицу.
Помимо десятичной, можно выразить числа еще в 3-х системах счисления, юзая префиксы для целых чисел:
0b
или0B
для двоичной системы (основание2
)0o
или0O
для восьмеричной системы (основание8
)0x
или0X
для шестнадцатеричной системы (основание16
)
Они удобны для битовых операций.
>>> 10 # десятичная СС
10
>>> 0b10 # двоичная СС
2
>>> 0o10 # восьмеричная СС
8
>>> 0x10 # шестнадцатеричная СС
16
А можно наоборот:
>>> bin(65) # в двоичную СС
'0b1000001'
>>> oct(65) # в восьмеричную СС
'0o101'
>>> hex(65) # в шестнадцатеричную СС
'0x41'
Функция chr()
преобразует int
в его строковый эквивалент (состоящий из одного символа):
>>> chr(65)
'A'
А функция ord()
- наоборот:
>>> ord('A')
65
Преобразования типов
int
/ float
←> boolean
>>> int(True)
1
>>> int(False)
0
>>> float(True)
1.0
>>> float(False)
0.0
Функция
bool()
преобразовывает любой тип данный вboolean
.
Ненулевые значения преобразуются в True
:
>>> bool(True)
True
>>> bool(1)
True
>>> bool(1.0)
True
>>> bool(45)
True
>>> bool(-45)
True
Нулевые значения преобразуются в False
:
>>> bool(False)
False
>>> bool(0)
False
>>> bool(0.0)
False
Кстати, булевы значения в арифметических операциях будут рассматриваться как 1
/ 1.0
и 0
/ 0.0
(в зависимости от int
/ float
):
>>> True + 2
3
>>> True + 2.0
3.0
>>> False + 2
2
>>> False + 2.0
2.0
float
←> int
При преобразовании из float
в int
просто отсекается всё, что находится после точки:
>>> int(98.6)
98
>>> int(1.0e4)
10000
>>> float(98)
98.0
>>> float(10000)
10000.0
str
←> int
>>> int('99')
99
>>> int('-23')
-23
>>> int('+12')
12
>>> int('1_000_000')
1000000
>>> str(99)
'99'
>>> str(+12)
'12'
>>> str(1_000_000)
'1000000'
# К слову:
>>> str(True)
'True'
Если число в строке представлено не в иной СС, можно указать основание этой СС:
>>> int('10', 2) # двоичная СС
2
>>> int('10', 8) # восьмеричная СС
8
>>> int('10', 16) # шестнадцатеричная СС
16
Но строки с float
числами преобразовываться не будут:
>>> int('98.6')
Traceback (most recent call last):
File "<input>", line 1, in <module>
int('98.6')
ValueError: invalid literal for int() with base 10: '98.6'
>>> int('1.0e4')
Traceback (most recent call last):
File "<input>", line 1, in <module>
int('1.0e4')
ValueError: invalid literal for int() with base 10: '1.0e4'
int
В Python 2 были ограничения на размер
int
, + был еще типаlong
.
В Python 3 переменная типа int может быть любого размера.
В python можно даже юзать гуголплексы (10 в степени гугол 🤓):
>>> googol = 10**100
>>> googol
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>>> googol * googol
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Во многих других ЯП такое число вызовет переполнение целочисленного значения и различные нежелательные последствия, так как компьютер не сможет предоставить все необходимое место. Python обрабатывает огромные целые числа порядка гугола без всяких проблем.
float
>>> 5.
5.0
>>> 5.0
5.0
>>> 05.0
5.0
>>> 1_000_000.0
1000000.0
>>> 1.0_0_1
1.001
>>> 5e0
5.0
>>> 5e1
50.0
>>> 5.0e1
50.0
Соус: Книга “Простой Python” → Глава 3. “Числа”