Числа в 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) – целоe числа в двоичную строку;
  • 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).
😭
😕
😃
😍