July 8

Числовые типы данных и операции над ними

Введение

В этой статье мы поговорим о числовых типах данных, арифметических операциях над ними и поймём как работает присваивание.

В python имеются три базовых типа для представления чисел:

  1. int – для целочисленных значений;
  2. float – для вещественных;
  3. complex – для комплексных.

Мы затронем первые два: int и float. Поскольку комплексные числа редко встречаются на практике и этот тип мы рассмотрим отдельно.

Первый целочисленный тип представляет собой, следующие числа:
0, 1, 2, 100, 6697959484, -1, -2, -7567658

Python поддерживает работу с очень большими числами, поэтому у вас, скорее всего не возникнет проблем с выходом за пределы диапазона.

Вещественные числа, то есть, дробные записываются через точку, например, так:
6.8, -5.567, 345.546, -65467.99

Здесь также довольно широкий диапазон значений, достаточный для большинства практических задач. Пока такого понимания чисел будет вполне достаточно.

Оператор присваивания

Отлично! Теперь вы знаете, какие типы чисел есть в Python. Давайте рассмотрим способ, как мы можем зафиксировать значение за определенной переменной. Для этого нам понадобится оператор присваивания =.

Разберем, как работает оператор присваивания на примере:

age = 21

В этом примере мы создали переменную age и присвоили ей значение 21.

Получается, что оператор присваиванию говорит компьютеру: "Смотри у нас есть именованная коробочка age, давай положим в неё значение 21".

Вот так вот, ничего сложного ^.^

Основные арифметические операции

Следующим шагом, нам с вами нужно научиться делать арифметические операции над ними. Что это за операции? Базовыми из них являются, следующие:

Как вы могли заметить, приоритет у этих операций такой же, как и в обычной математике. Единственное, что я бы хотел тут уточнить, так это то, что мы можем менять приоритет операций при помощи скобочек (). Всё, как в школьной математике! Кстати её уровня будет достаточно для решения большинства возникающих задач.

Некоторые из операций могут быть вам незнакомы. Давайте, я поясню их работу на конкретных примерах:

Сложение, вычитание и умножение

Пример:

a = 10
b = 13
print(a+b)

Выведет: 23

Примечание. Мы можем складывать много переменных/чисел за один раз: a+b+10+5.0

Давайте рассмотрим ещё один пример сложения:

Пример:

a = 10
b = 5.5
print(a+b)
c = 10
d = 10.0
print(c+d)

Выведет:

15.5
20.0

Заметили что произошло? При сложении целочисленного типа с дробным, вы всегда будете получать дробное число. Аналогично будет работать с вычитанием и умножением.

Пример умножения:

a = 5
b = 3
print(a*b)
a = 2.5
b = 2
print(a*b)

Выведет:

15
5.0

Надеюсь, что здесь результат уже для всех был очевидным изначально.

Деление

А вот деление отличается довольно сильно и как вы могли заметить в Python их 3!

Пример классического деления:

a = 10
b = 3
c = 2
print(a/b)
print(a/c)

Выведет:

3.3333333333333335
5.0

Теперь давайте обсудим результат, который у нас получился. При делении 10 на 3, мы получили 3.3333333333333335. Только вот откуда там взялась 5?

Это не ошибка Python, а лишь аппаратное ограничение. Оказывается, что числа с плавающей точкой в памяти компьютера реализованы с помощью двоичных дробей — компьютер понимает только их (0 и 1). Именно поэтому большинство десятичных дробей невозможно со всей точностью хранить в памяти компьютера.

Приведем пример. Мы не можем представить дробь 2/3 в виде десятичного числа. 2/3 = 0.6666666666666666... цифра 6 будет повторяться бесконечно. Поэтому хранить можно лишь приблизительное значение этого числа.

В Python точность чисел с плавающей точкой обеспечивается только до 15 знака, на 16 могут возникать неточности.

Важно! При классическом делении всегда получается вещественное (дробное) число, независимо от входных данных.

Давайте рассмотрим ещё один пример такого поведения:

print(1.1+2.2)

Выведет: 3.3000000000000003

Для решения этой проблемы вы можете воспользоваться функцией округления чисел round.

Её синтаксис round(number, ndigits), где

  • number - это число или выражение, которое мы хотим округлить
  • ndigits - число цифр, после запятой

Пример:

print(round(2/3, 2))
print(round(1.1+2.2, 2))

Выведет:

0.67
3.3 (Функция round в Python округляет число до указанного количества 
десятичных знаков, но не добавляет незначащие нули.)

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

Целочисленное деление

Ещё один из видов деления, который позволяет нам находить целое число при деление. (Автоматически округляет число до наименьшего кратного). Перейдём сразу к примеру:

Пример:

a = 10
b = 5
print(a//b)
print(b//a)
c = 10
d = 3
print(c//d)

Выведет:

2 (на выходе получаем 2, поскольку 2 ближайшее наименьшее целое число к 2.0)
0 (на выходе получаем 0, поскольку 0 ближайшее наименьшее целое число к 0.5)
3 (на выходе получаем 3, поскольку 3 ближайшее наименьшее целое число 
к 3.(3))

Примечание: 3.(3) - это сокращенная запись числа 3.3333333333...

Рассмотрим целочисленное деление отрицательных чисел.

Пример:

c = -7 // 2
print(c)

Выведет:

-4 (На выходе получили -4, поскольку -4 ближайшее наименьшее целое 
число к -3.5)

Теперь рассмотрим операцию нахождения остатка при делении.

Что это вообще такое? Например, если делить 10/3 то остаток будет равен 1.

Почему так? Все просто, число 3 трижды входит в число 10 и остается значение 10 - 3∙3 = 1.

Для вычисления этого значения в Python используется оператор %.

Пример:

a = 10
b = 3
print(a % b)
print(a % 4)
print(a % 10)
print(a % 5)

Выведет:

1
2
0
0

Согласитесь, удобно и просто. Если вам тяжело это понять, то попробуйте посчитать уравнения из примера на листочке ;)

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

Возведение в степень

Последняя из операций, которые нам необходимо рассмотреть - это возведение в степень (**).

Она работает довольно просто: мы берем число и умножаем его на себя столько раз, сколько указано.

Рассмотрим парочку примеров:

  1. 3**3 = 27 (3*3 = 9, 9*3=27)
  2. 2**4 = 16 (2*2=4, 4*2=8, 8*2=16)
  3. Ну и так далее...

Давайте рассмотрим парочку более интересных примеров:

print(36**0.5)
print(144**0.5)

Выведет:

6
12

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

Таким образом, 36**0.5 вычисляет квадратный корень из 36, что равно 6, а 144**0.5 вычисляет квадратный корень из 144, что равно 12.

Пример:

print(2**3**2)

Выведет:

512

В Python операции возведения в степень выполняются справа налево. Поэтому сначала вычисляется 3**2, что равно 9, а затем 2**9, что равно 512.

Таким образом, 2**3**2 эквивалентно 2**(3**2), и результатом является 512.

Что необходимо запомнить:

  • В Python есть 3 числовых типа данных - int, float, complex.
  • Для присвоения переменной значения, используется оператор присваивания =
  • В Python поддерживаются все арифметические операции из школьной математики (сложение, вычитание, умножение, деление, возведение в степень)
  • При выполнение операции с разными типами данных, Python автоматически преобразует тип к тому, что будет более "точным".
  • При классическом (обычном) делении всегда получается вещественное (дробное) число, независимо от входных данных.
  • В Python точность чисел с плавающей точкой обеспечивается только до 15 знака, на 16 могут возникать неточности. Помните об этом.
  • При помощи операции возведения в степень, можно не только возводить числа в степень, но и вычислять корни.
  • для округления чисел используется функция round(number, ndigits), где
    • number - это число или выражение, которое мы хотим округлить
    • ndigits - число цифр, после запятой