Числа в Python и операции над ними
upd:
20.2K
1

Числа в 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).
2
😭
3
😕
6
😃
35
😍
Комментарии (1)
Павел
1 год 4 месяца назад

Очень поверхностно всё. Вообще не понял что за: "Целые числа в Python представлены только одним типом — PyLongObject"

Вообще не понял что за Комплексные числа complex, откуда они взялись и для чего их применять.

Также скорее всего большинство читателей не поняли, что такое двоичные, восьмеричные, шестнадцатеричные числа . Для чего их придумали ... ?

Почему в начале не объяснили откуда взялись символы B, O, X ? 0b (0B) — для двоичного представления; 0o (0O) — для восьмеричного представления; 0x (0X) — для шестнадцатеричного представления.

Если бы это было бы написано также в начале, а не в конце темы , то легче было понять и запомнить: bin(x) — целое числа в двоичную строку; oct(x) — целое число в восьмеричную строку; hex(х) — целое число в шестнадцатеричную строку; Насчет hex не понял, если 0x ...

Понравилось, что подчеркнули " Однако стоит помнить, что метод isdigit() не работает для отрицательных чисел и чисел с плавающей точкой."

Как то так :) Но всё равно прочитал эту тему и другие.

3
ответить
Может понравиться
Строки и функции для работы с ними
Основы
upd:
Строки в Python и функции для работы с ними