Числа в Python (FAQ)
Числа в Python (как и в других языках программирования) чрезвычайно простое понятие. В Python все переменные представляют собой объекты и размещаются в динамической памяти.
Базовый набор Python содержит следующие типы чисел:
- целые (int);
- вещественные (float) [с десятичной точкой];
- комплексные (complex) [состоят из действительной и мнимой части].
Над числами в Python можно выполнять самые обычные математические операции: сложение (+), вычитание (-), возведение в степень (**) и т.д.
Целые числа (int)
В Python любое число, состоящее из десятичных цифр без префикса, интерпретируется как десятичное число типа int
.
>>> 0
0
>>> 20
20
>>> -20
-20
>>> type(20)
<class 'int'>
>>> 100 + 20
120
Целые числа в Python представлены только одним типом — PyLongObject, реализация которого лежит в longobject.c, а сама структура выглядит так:
struct _longobject {
PyObject_VAR_HEAD
digit ob_digit[1]; # массив цифр
};
Любое целое число состоит из массива цифр переменной длины, поэтому в Python 3 в переменную типа int
может быть записано число неограниченной длины. Единственное ограничение длины — это размер оперативной памяти.
>>> 134523345234252523523478777 ** 2
18096530413013891133013347014216107772438771969415729
Целые числа могут записываться не только как десятичные, но и как двоичные, восьмеричные или шестнадцатеричные. Для этого перед числом нужно написать символы:
- 0b (0B) – для двоичного представления;
- 0o (0O) – для восьмеричного представления;
- 0x (0X) – для шестнадцатеричного представления.
>>> print(20, type(20)) # десятичное представление
20 <class 'int'>
>>> print(0b10100, type(0b10100)) # двоичное представление
20 <class 'int'>
>>> print(0o24, type(0o24)) # восьмеричное представление
20 <class 'int'>
>>> print(0x14, type(0x14)) # шестнадцатеричное представление
20 <class 'int'>
Вещественные числа (float)
Еще такие числа называют числами с плавающей точкой. Это числа, содержащие точку (десятичный разделитель) или знак экспоненты.
>>> 1.5
1.5
>>> type(1.5)
<class 'float'>
>>> 3.
3.0
>>> .5
0.5
>>> .4e7
4000000.0
>>> type(.4e7)
<class 'float'>
>>> 4.1e-4
0.00041
Числа типа float
— неточны (из-за представления чисел с плавающей запятой в компьютере).
>>> 0.3 + 0.3 + 0.3 + 0.1
0.9999999999999999
Информацию о точности и внутреннем представлении float
для вашей системы можно получить из sys.float_info
>>> import sys
>>> sys.float_info
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308,
min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15,
mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
Если нужна высокая точность обычно используют модули Decimal и Fraction.
Об ограничениях и подводных камнях в работе с числами с плавающей точкой описано тут.
Комплексные числа (complex)
Комплексные числа представляют собой пару значений типа int
или float
, и имеют вид <реальная часть>+<мнимая часть>j
.
>>> 1.1+2j
(1.1+2j)
>>> type(1.1+2j)
<class 'complex'>
Отдельные части комплексного числа доступны через атрибуты real
и imag
>>> num = 1.1+2j
>>> num.real, num.imag
(1.1, 2.0)
Операции с числами
Является ли переменная числом
Любую переменную можно проверить на тип (int, float или complex):
n = 10
>>> if type(n) == int:
print("This is int")
This is int
Если вы хотите проверить, находится ли в строке число, воспользуйтесь методом isdigit()
>>> string = "404"
>>> string.isdigit()
True
Однако стоит помнить, что метод isdigit()
не работает для отрицательных чисел и чисел с плавающей точкой.
Также для проверки на число, можно написать собственную функцию:
>>> def isInt(value):
try:
int(value)
return True
except ValueError:
return False
>>> isInt(123)
True
>>> isInt("qwerty")
False
>>> isInt("123")
True
>>> isInt("-123")
True
>>> isInt("123.2")
False
Арифметические операции
x + y
— сложение;x - y
— вычитание;x * y
— умножение;x / y
— деление;x // y
— целочисленное деление;x % y
— остаток от деления;x ** y
— возведение в степень;-x
— смена знака;abs(x)
— модуль числа;divmod(x, y)
— возвращает кортеж из частного и остатка от деления x на y;pow(x, y[, z])
— возведение числа в степень (z — деление по модулю);round(x[, ndigits])
— округление числа (ndigits - знаки после запятой).
Сравнение чисел
x == y
— равно;x != y
— не равно;x > y
— больше;x < y
— меньше;x >= y
— больше или равно;x <= y
— меньше или равно.
Преобразования
int(x)
— преобразование в целое числоint
;float(x)
— преобразование в число с плавающей точкойfloat
;complex(x)
— преобразование в комплексное числоcomplex
;bin(x)
— целое числа в двоичную строку;oct(x)
— целое число в восьмеричную строку;hex(х)
— целое число в шестнадцатеричную строку;[int(x) for x in str(123)]
— перевод целого числа 123 в список цифр этого числа;int(''.join(str(digit) for digit in [1,2,3]))
— перевод списка цифр [1,2,3] в целое число 123;str(x)
— число в строку;
Ввод чисел
Для ввода данных в программу на языке Python используется функция input()
. Эта функция считывает то что вы ввели на клавиатуре, и записывает эти данные в переменную в виде одной строки. После этого, перевести строку в число можно простыми функциями int()
, float()
или complex()
.
Если нужен список чисел, введите несколько чисел через пробел и выполните:
my_list = [int(x) for x in input().split()]
print(my_list)
> [1, 2, 3]
Вывод чисел
Для вывода числа используйте print()
:
>>> print(1)
1
>>> print(-1.2)
-1.2
>>> print(1, 3, 4)
1 3 4
На практике возникают ситуации, когда нужно вывести число вместе со строкой (например пояснить, что означает число). Существует несколько вариантов сделать это:
>>> print("int variable = " + str(1))
int variable = 1
>>> print("int variable = {}".format(1))
int variable = 1
>>> print(f'int variable = {1}') # f-строки работают в Python 3.6+
int variable = 1
Другие полезные функции
len(str(x))
— посчитает длину числа;1230 % 2
— если остаток от деления равен 0, то число четное;range(0,5)
— диапазон чисел от 0 до 5, по которому можно итерироваться;int(str(123)[::-1])
— перевернет число (123 -> 321).
Очень поверхностно всё. Вообще не понял что за: "Целые числа в Python представлены только одним типом —
PyLongObject
"Вообще не понял что за Комплексные числа
complex
, откуда они взялись и для чего их применять.Также скорее всего большинство читателей не поняли, что такое двоичные, восьмеричные, шестнадцатеричные числа . Для чего их придумали ... ?
Почему в начале не объяснили откуда взялись символы B, O, X ? 0b (0B) — для двоичного представления; 0o (0O) — для восьмеричного представления; 0x (0X) — для шестнадцатеричного представления.
Если бы это было бы написано также в начале, а не в конце темы , то легче было понять и запомнить: bin(x) — целое числа в двоичную строку; oct(x) — целое число в восьмеричную строку; hex(х) — целое число в шестнадцатеричную строку; Насчет hex не понял, если 0x ...
Понравилось, что подчеркнули " Однако стоит помнить, что метод
isdigit()
не работает для отрицательных чисел и чисел с плавающей точкой."Как то так :) Но всё равно прочитал эту тему и другие.