Числа в Python

Числа в 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).

источник