Деление в Python
Python — популярный высокоуровневый язык программирования. Он обладает большим набором инструментов, имеет динамическую типизацию и используется для решения любых видов задач.
Деление в Python разделяется на три вида: обычное, целочисленное и взятие остатка. Программисту не нужно заботиться о типах операндов, Python сам определяет их и приводит результат к нужному виду. Как это делается, разберемся в этой статье.
Оператор деления
Деление в Python обозначается косой чертой «/». Примечательно, что результат в консоле всегда приводится к типу «float», даже если оба операнда были целочисленного типа, об этом свидетельствует появление «.0» у полученного значения.
Это появилось в 3-ей версии Python, ранее результатом деления целых чисел было только целое число, чтобы получить дробный результат, программисты явно указывали одному из операндов тип «float», в противном случае дробная часть просто отбрасывалась.
Важно понимать, что деление в Python, как и другие операции, работает медленнее, чем в более низкоуровневых языках программирования. Это связано с высоким уровнем автоматизации и абстракции, из-за динамической типизации интерпретатор вынужден приводить числа к дробному типу «float», который требует большего количества памяти.
Деление в представлении человека отличается от его представления в компьютере. Компьютер устроен так, что все арифметические операции могут выполняться только через сложение. Это значит, что быстрее всего выполняется сложение, затем вычитание, где необходимо менять знак операндов, умножение, где число складывается много раз. Деление выполняется дольше всех, потому что помимо многократно повторяющейся операции сложения необходимо также менять знак операндов, что требует больше памяти и действий.
Из примера видно, что не смотря на то, что во всех случаях операция была между целыми числами, результатом деления в Python 3 является вещественное число. В первом случае мы даже специально использовали приведение к типу int.
Деление без остатка
Чтобы выполнить деление на цело в Python, можно воспользоваться целочисленным делением. В этом случае результатом будет целое число, без остатка. Целочисленное деление в Python обозначается двумя косыми чертами «//».
В отличие от других языков программирования Python позволяет результату целочисленного деления быть как целым (int), так и дробным (float) числом. В обоих случаях дробная часть отбрасывается и получается число с окончанием «.0».
Примеры нахождения целой части от деления:
В первых двух случаях деление осуществлялось между целыми числами. Поэтому в результате было получено целое число. В третьем примере одно из чисел вещественное. В этом случае в результате получаем так же вещественное число (типа float), после запятой у которого 0.
Остаток
Для получения остатка от деления в Python 3 используется операция, обозначающаяся символом процента «%». Остаток — это оставшаяся после целочисленного деления часть числа. Операция взятия остатка используется для решения различных видов задач.
Определение остатка от деления очень часто используется в программах для нахождения, допустим, чётных чисел. Или, например, если обработка данных выполняется в цикле, и нужно выводить в консоль сообщение о ходе обработки не каждый раз, а на каждой 10-ой итерации.
Вот пример вывода чётных чисел из списка в консоль:
Проблемы чисел с плавающей точкой
Компьютер устроен так, что на аппаратном уровне понимает только две цифры: один и ноль. Из-за этого при делении и других операциях с дробями часто возникают проблемы. Например, 1/10 в двоичном представлении является неправильной бесконечной дробью. Её нельзя написать полностью, поэтому приходится округлять, а выбор значения при округлении ограничен нулем и единицей.
Что говорить о делении, если ошибки возникают и при операции сложения. Если сложить число «0.1» с самим собой четырнадцать раз, то получиться 1.400…01. Откуда взялась эта единица? Она появилась при переводе числа из двоичного вида в десятичный.
Более технически сложное деление приводит к подобным неточностям гораздо чаще. Обычно Python округляет результат так, что пользователь не замечает этой проблемы, но если получается достаточно длинное число, то проблема проявляется.
Деление комплексных чисел
Комплексные числа — это числа вида «a + b·i». Они занимают наивысшую ступень в иерархии чисел, арифметические операции над ними существенно отличаются от операций над обычными числами.
Деление комплексного числа на обычное меняет лишь длину радиус вектора, но не его направление.
Сокращенные операции деления
Чтобы упростить жизнь программистов, разработчики Python включили в язык «сокращенные операции». Их используют если надо выполнить операцию над переменной и полученный результат записать в эту же переменную. То, что записывается в длинной форме, можно записать в более короткой по следующим правилам:
Полная форма | Краткая форма | |
Деление | a = a / b | a /= b |
Целая часть | a = a // b | a //=b |
Остаток | a = a % b | a %= b |
Деление на ноль
Если попробовать в Python выполнить деление на 0, то мы получим исключение ZeroDivisionError.
Исключение следует обрабатывать, это можно сделать так:
Но в этом случае мы обрабатываем все исключения. Зачастую так делать не совсем корректно. Мы знаем, что в нашем коде возможно деление на 0 и, чтобы отловить именно эту ошибку, следует заменить except Exception as e: на except ZeroDivisionError as e: .
Но можно и проверять перед выполнением операции, что делитель не равен 0. Например так:
Математические вычисления в Python 3
Программирование невозможно представить без работы с числами. Размеры экрана, выбор цвета путем присвоения числовых кодов, географическое расположение, деньги и очки, продолжительность видео – для всего этого используются числа.
Потому умение выполнять математические операции очень важно для программирования. Конечно, чем выше у вас навык математических вычислений, тем лучше для вас; однако совсем не обязательно уметь выполнять сложнейшие вычисления, чтобы быть хорошим программистом. Если у вас нет опыта работы в области математики, старайтесь представлять математику как инструмент или как способ улучшить ваше логическое мышление.
Данное руководство научит вас работать с двумя наиболее распространёнными числовыми типами данных Python:
- целыми числами (бывают положительными, отрицательными или равными нулю (…, -1, 0, 1, …)).
- и числами с плавающей точкой (числа с десятичными знаками (например, 9.0 или -2.25)).
Операторы Python
Оператор – это символ или функция, которая выполняет то или иное действие над данными. К примеру, символ + – это оператор сложения.
В Python присутствуют как общие, так и специальные математические операторы.
Ниже приведена таблица наиболее распространённых математических операторов Python.
Операция | Результат |
x + y | Сложение (сумма x и y) |
x – y | Вычитание (разница между x и y) |
-x | Смена знака x |
+x | Тождественность x |
x * y | Умножение x на y |
x / y | Деление x на y |
x // y | Получение целой части от деления x на y |
x % y | Остаток от деления x / y |
x ** y | Возведение в степень |
Также руководство охватывает использование операторов присваивания.
Сложение и вычитание
Операции сложения и вычитания в Python выполняются точно так же, как и в обычной математике. Вы даже можете использовать Python вместо калькулятора.
Также вы можете объявить переменные и указать их в функции print:
a = 88
b = 103
print(a + b)
191
Целые числа бывают положительными и отрицательными. Попробуйте сложить следующие числа:
c = -36
d = 25
print(c + d)
-11
Числа с плавающей точкой складываются аналогичным образом:
e = 5.5
f = 2.5
print(e + f)
8.0
В результате сложения чисел с плавающей точкой также получается число с плавающей точкой, потому Python выводит 8.0, а не 8.
Синтаксис вычитания отличается от сложения только оператором. Попробуйте отнять 32 из 75.67:
g = 75.67
h = 32
print(g — h)
43.67
Примечание: Если в операции присутствует хотя бы одно число с плавающей точкой, в результате Python также выведет число с плавающей точкой.
Унарные арифметические операции
Унарное математическое выражение состоит только из одного компонента или элемента. В Python плюс и минус вместе со значением могут быть использованы в качестве одного элемента, это позволяет показать тождественность значения (+) или изменить его знак (-).
Тождественность используется нечасто. Плюс можно использовать с положительными числами:
Если вы используете плюс с отрицательным числом, он также вернёт тождественное (в этом случае – отрицательное) число.
Минус позволяет изменить знак. Если вы добавите минус к положительному значению, в результате будет отображено отрицательное значение:
Если добавить минус к отрицательному значению, в результате получится положительное число:
Умножение и деление
Операции умножения и деления, как сложение и вычитание, выполняются в Python так же, как в обычной математике. Для умножения Python использует *, для деления – /.
k = 100.1
l = 10.1
print(k * l)
1011.0099999999999
При делении в Python 3 частное всегда возвращается в виде числа с плавающей точкой, даже если вы делите целые числа:
m = 80
n = 5
print(m / n)
16.0
Это одно из главных различий между Python 2 и Python 3. Python 3 возвращает дробный результат, потому при делении 11 на 2 вы получите 5.5. В Python 2 деление привязано к типам данных, потому при делении целого числа невозможно получить число с плавающей точкой; поэтому при делении 11 на 2 Python 2 возвращает 5.
Читайте также: Python 2 vs Python 3
Когда числа по обе стороны символа деления являются целыми, выполняется деление floor, то есть, для фактора х Python 2 возвращает наибольшее целое число меньше или равное х. К примеру, при делении 5 / 2 таким числом будет 2.
Чтобы выполнить деление floor и получить только целую часть числа, Python 3 использует оператор //. К примеру, разделив 100//40, вы получите 2.
Деление по модулю
Оператор % – это модуль, который возвращает остаток от деления. К примеру, это позволяет найти числа, кратные одному и тому же числу.
o = 85
p = 15
print(o % p)
10
При делении 85 на 15 получается 5 и 10 в остатке.
Попробуйте разделить числа с плавающей точкой:
q = 36.0
r = 6.0
print(o % p)
0.0
Число 36.0 делится на 6.0 без остатка, потому в результате получился 0.0.
Возведение в степень
Оператор ** в Python возводит число в степень. Например, выражение 5 ** 3 значит, что 5 нужно возвести в третью степень. В математике это выглядит так: 5³. В Python можно получить тот же результат (125), умножив 5*5*5.
s = 52.25
t = 7
print(s ** t)
1063173305051.292
Приоритет операций
Как и в математике, в Python нужно помнить о том, что операции выполняются в порядке их приоритета, а не по порядку справа налево.
Сначала выполняется умножение (10*5=50), а затем сложение (10+50). Потому результат будет такой:
Чтобы сначала выполнить операцию сложения, а затем умножить полученный результат на 5, нужно взять сложение в скобки:
u = (10 + 10) * 5
print(u)
100
Математические операции имеют такой приоритет:
- Выражение в скобках;
- Экспоненты;
- Умножение;
- Деление;
- Сложение;
- Вычитание.
Операторы присваивания
Наиболее распространённым оператором присваивания является знак равенства (=). Он присваивает переменной слева значение справа. К примеру, в выражении v = 23 переменной v было присвоено значение 23.
В программировании часто используются составные операторы присваивания, которые выполняют операцию со значением переменной, а затем присваивают этой переменной полученное новое значение. Составные операторы объединяют арифметический оператор с оператором =. Например:
Составной оператор += выполнил сложение, а затем присвоил переменной w, значение, полученное в результате сложения.
Составные операторы часто используются в циклах.
for x in range (0, 7):
x *= 2
print(x)
0
2
4
6
8
10
12
Это позволяет автоматизировать процесс умножения чисел в заданном диапазоне.
В Python есть составные операторы присваивания для каждой математической операции:
y += 1 # сложение и присваивание
y -= 1 # вычитание и присваивание
y *= 2 # умножение и присваивание
y /= 3 # деление и присваивание
y // = 5 # деление floor и присваивание
y **= 2 # возведение в степень и присваивание
y %= 3 # вывод остатка и присваивание
Операторы присваивания позволяют постепенно увеличить или уменьшить значение, а также автоматизировать некоторые вычисления.
Операции с целыми числами (mod div) и стандартные функции
Над целыми числами В PascalABC можно проводить не только простые арифметические операции (сложение, вычитание, деление и умножение). Есть еще две: деление нацело (обозначается div) и деление с остатком (mod). Рассмотрим их применение на примерах.
Деление нацело ( div )
Целочисленное деление — это деление, при котором одно целое число делится на другое целое число. Результатом является целая часть их частного.
Результатом операции является целое число, полученное в результате деления, а точнее — целая часть результата деления.
Остаток от деления ( mod )
Деление с остатком — это деление одного числа на другое, при котором остаток не равен нулю. 16: 7 = 2 (ост. 2) 23: 8 = 2 (ост. 7)
Результатом операции является целое число — разность делимого числа и ближайшего к нему меньшего или равного целого числа, которое делится нацело на делитель.
Важно! Операции div и mod применяются только к целым числам.
Операцию mod используют для определения кратности чисел, то есть делимости на какое-нибудь число нацело. Например, что числа 2, 6, 12, 24 кратны двум (чётные числа). Получается, что все числа не кратные двум — нечётные. Или числа 5,10,15,20 кратны 5.
Рассмотрим несколько примеров использования данных операций в программировании.
Задание 1. Дан размер файла в байтах. Используя операцию деления нацело, найти количество полных килобайтов, которые занимает данный файл (1 килобайт = 1024 байта).
Решение:
Задание 2. Дано трехзначное число k. Найдите сумму его цифр S.
Решение:
Стандартные функции PascalABC
При составлении программ на Паскале для расчетов можно использовать функции, которые присутствуют в среде программирования. Ниже приведен список наиболее востребованных функций: степень, модуль, корень и другие
Обозначение функции | Тип результата | Описание функции |
Abs(x) | совпадает с типом параметра | Модуль в паскале определяется через функцию Abs(x). Она возвращает абсолютное значение (модуль) x. Пример, если х=-6, то Abs(x)=6. |
Sqr(x) | совпадает с типом параметра | Вторая степень в паскале может быть вычислена через функцию Sqr(x). Она возвращает квадрат числа x. Пример, если х=5, то Sqr(5)=25 |
Sqrt(x) | Квадратный корень в паскале извлекается с помощью функции Sqrt(x). Она возвращает квадратный корень из числа x. Например, если х=49, то Sqrt(49)=7. Аргумент функции должен быть положительным числом. | |
Power(x,y) | real | Произвольную степень в паскале вычисляют с помощью Power(x,y). Она возвращает x в степени y. Например, если основание х=2, а степень у=5, то Power(2,5)=32. В PascalABC степень можно вычислить следующей записью: 2**5 (две звездочки — это возведение в степень) |
Int(x) | real | возвращает целую часть х |
Random(x) | integer | возвращает случайное целое в диапазоне от 0 до x-1 |
Random | real | возвращает случайное вещественное в диапазоне [0..1) |
Frac(x) | real | возвращает дробную часть х |
Trunc(x) | x-real, integer | возвращает целую часть х |
Подробный и более полный список функций можно получить в справочной системе среды программирования PascalABC в меню Помощь — Содержание — Справочник по языку — Стандартные процедуры и функции
Задание 3. Вычислите значение выражения y=5x 7 -4x 2 +3
Div/ru
Div является операцией деления, при которой дробная часть (остаток от деления) отбрасывается. Выражение (a div b) возвращает целую часть от деления двух целых чисел. Данная операция является противоположным действием выражения (a / b), которые возвращает результат в виде вещественного числа. Обе части выражения, использующиеся в операторе div должны иметь целые типы. Использование операндов вещественного типа в операторе div приведет к ошибке в процессе компиляции: «Error: Operator is not overloaded:». Для получения целочисленного результата при использовании оператора ‘/’ и операндов вещественного типа необходимо использовать функции Trunc или Round.
Output:
5
5.3333333333333330E+000
3
3.3333333333333335E+000