Skip to content

Числа в python

Целые числа

Нельзя ставить ноль (0) перед другими цифрами, ибо:

Python
>>> 05
    File "<stdin>", line 1
        05
         ^
SyntaxError: invalid token

Положительные и отрицательные числа:

Python
>>> 123
123
>>> +123
123
>>> -123
-123

При записи числа допускаются разделители в виде underscore _, которые будут проигнорированы:

Python
>>> 1_000_000
1000000
>>> 1_2_3
123


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

Система счисления указывает, сколько цифр вы используете до того, как перенесете единицу.

Помимо десятичной, можно выразить числа еще в 3-х системах счисления, юзая префиксы для целых чисел:
+ 0b или 0B для двоичной системы (основание 2)
+ 0o или 0O для восьмеричной системы (основание 8)
+ 0x или 0X для шестнадцатеричной системы (основание 16)

Они удобны для битовых операций.

Python
>>> 10    # десятичная СС
10
>>> 0b10  # двоичная СС
2
>>> 0o10  # восьмеричная СС
8
>>> 0x10  # шестнадцатеричная СС
16

А можно наоборот:

Python
>>> bin(65)  # в двоичную СС
'0b1000001'
>>> oct(65)  # в восьмеричную СС
'0o101'
>>> hex(65)  # в шестнадцатеричную СС
'0x41'

Функция chr() преобразует int в его строковый эквивалент (состоящий из одного символа):

Python
>>> chr(65)
'A'

А функция ord() - наоборот:

Python
>>> ord('A')
65


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

int / float <-> boolean

Python
>>> int(True)
1
>>> int(False)
0

>>> float(True)
1.0
>>> float(False)
0.0

Функция bool() преобразовывает любой тип данный в boolean.

Ненулевые значения преобразуются в True:

Python
>>> bool(True)
True
>>> bool(1)
True
>>> bool(1.0)
True
>>> bool(45)
True
>>> bool(-45)
True

Нулевые значения преобразуются в False:

Python
>>> bool(False)
False
>>> bool(0)
False
>>> bool(0.0)
False

Кстати, булевы значения в арифметических операциях будут рассматриваться как 1 / 1.0 и 0 / 0.0 (в зависимости от int / float):

Python
>>> True + 2
3
>>> True + 2.0
3.0
>>> False + 2
2
>>> False + 2.0
2.0

float <-> int

При преобразовании из float в int просто отсекается всё, что находится после точки:

Python
>>> int(98.6)
98
>>> int(1.0e4)
10000

>>> float(98)
98.0
>>> float(10000)
10000.0

str <-> int

Python
>>> 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'

Если число в строке представлено не в иной СС, можно указать основание этой СС:

Python
>>> int('10', 2)   # двоичная СС
2
>>> int('10', 8)   # восьмеричная СС
8
>>> int('10', 16)  # шестнадцатеричная СС
16

Но строки с float числами преобразовываться не будут:

Python
>>> 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 в степени гугол 🤓):

Python
>>> googol = 10**100
>>> googol
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>>> googol * googol
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

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


float

Python
>>> 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. "Числа"

python