Как вычислить остаток от деления в Python?

Я хочу вычислить остаток от деления двух чисел в Python. Как это сделать?

Оператор Modulo в Python возвращает остаток от деления двух чисел и представлен с помощью символа %. Оператор Modulo относится к арифметическим операторам Python. Вот пример его использования: 5 % 2 равно 1 (остаток от деления 5 на 2).

Символ оператора деления по модулю — %, и его необходимо указать между двумя операндами деления.

Вот несколько примеров того, как это использовать:

>>> 5 % 2
1
>>> 8 % 3
2
>>> 8 % 2
0

Давайте поясним приведенные выше примеры:

  • 5 по модулю 2 равно 1, поскольку 5, деленное на 2, равно 2 с остатком 1.
  • 8 по модулю 3 равно 2, поскольку 8, деленное на 3, равно 2 с остатком 2.
  • 8 по модулю 2 равно 0, поскольку 8, деленное на 2, равно 4 с остатком 0.

Оператор по модулю иногда называют модулем или модульным делением в Python.

Как вычислить остаток от деления отрицательных целых чисел на Python?

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

Давайте проверим это на отрицательных целых числах:

>>> -5 % 2
1
>>> -5 % -2
-1
>>> 5 % -2
-1         

Вы можете видеть, что операция деления по модулю в Python возвращает остаток того же знака, что и делитель.

Вычисление модуля числа с плавающей точкой в ​​Python

Теперь посмотрим, как работает модуль с числами с плавающей точкой.

>>> 3.4 % 2
1.4
>>> 3.4 % 2.0
1.4
>>> 3.4 % 2.2
1.1999999999999997         

Первые два примера работают так же, как мы видели с целыми числами.

Давайте убедимся, что это также относится и к третьему примеру:

>>> 3.4/2.2
1.5454545454545452
>>> 3.4 - 2.2
1.1999999999999997         

Итак, 3,4 % 2,2 равно 1,1999999999999997, потому что 3,4 равно 1*2,2+1,1999999999999997.

>>> 1*2.2+1.1999999999999997
3.4         

Вычисление модуля, если делимое меньше делителя

В предыдущих примерах делимое (левая часть оператора по модулю) всегда было больше делителя (правая часть оператора по модулю).

Теперь посмотрим, что произойдет, если делимое меньше делителя.

>>> 2 % 10
2
>>> 3 % 5
3         

В обоих примерах результат деления равен 0, поэтому остаток от деления равен значению делимого.

А как насчет поплавков?

>>> 2.2 % 10.2
2.2
>>> 3.4 % 6.7
3.4         

То же самое касается и поплавков.

Можно ли использовать модуль Python внутри оператора if?

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

Это основано на следующей логике:

  • Нечетное число , деленное на 2, дает остаток 1.
  • Четное число , деленное на 2, дает остаток 0.
>>> for x in range(20):
…     if x % 2 == 0:
…         print("The number {} is even".format(x))
…     else:
…         print("The number {} is odd".format(x))
…
The number 0 is even
The number 1 is odd
The number 2 is even
The number 3 is odd
The number 4 is even
The number 5 is odd
The number 6 is even
The number 7 is odd
The number 8 is even
The number 9 is odd
The number 10 is even
The number 11 is odd
The number 12 is even
The number 13 is odd
The number 14 is even
The number 15 is odd
The number 16 is even
The number 17 is odd
The number 18 is even
The number 19 is odd

Обратите внимание, что для вывода значения x как части оператора печати мы использовали метод строк format().

Модуль Python, когда делитель равен нулю

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

Для целых чисел:

>>> 3 % 0
Traceback (most recent call last):
  File "", line 1, in 
ZeroDivisionError: integer division or modulo by zero         

Для float:

>>> 2.4 % 0
Traceback (most recent call last):
  File "", line 1, in 
ZeroDivisionError: float modulo         

В обоих случаях интерпретатор Python вызывает исключение ZeroDivisionError.

Исключение можно обработать с помощью оператора try-except.

>>> try:
…     3 % 0
… except ZeroDivisionError:
…     print("You cannot divide a number by zero")
…
You cannot divide a number by zero         

Использование функции Math.fmod

Альтернативой оператору остатка от деления %, который предпочтительнее при работе с числами с плавающей точкой, является функция fmod(), являющаяся частью модуля math Python.

Ниже вы можете увидеть описание math.fmod() из официальной документации Python.

Функция Python math.fmod()

Ранее мы тестировали оператор % с отрицательными целыми числами:

>>> -5 % 2
1
>>> -5 % -2
-1
>>> 5 % -2
-1

Давайте посмотрим, какие результаты мы получим, используя math.fmod():

>>> math.fmod(-5, 2)
-1.0
>>> math.fmod(-5, -2)
-1.0
>>> math.fmod(5, -2)
1.0         

А вот разница, когда мы вычисляем модуль с отрицательными числами с плавающей точкой.

Оператор по модулю, используемый с отрицательными числами с плавающей точкой

>>> -5.2 % 2.2
1.4000000000000004
>>> -5.2 % -2.2
-0.7999999999999998
>>> 5.2 % -2.2
-1.4000000000000004         

Математическая функция fmod Python, используемая с отрицательными числами с плавающей точкой

>>> math.fmod(-5.2, 2.2)
-0.7999999999999998
>>> math.fmod(-5.2, -2.2)
-0.7999999999999998
>>> math.fmod(5.2, -2.2)
0.7999999999999998         

Теперь, когда мы рассмотрели несколько примеров, демонстрирующих, как использовать оператор остатка от деления, дайте мне знать в комментариях, для чего вы используете остаток от деления.

Автор

Фото аватара

Владимир Михайлов

Программист на Python с большим количеством опыта и разнообразных проектов.