Определение остатка от деления чисел в Python: методы решения

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

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

Python
Скопировать код
remainder = 7 % 5
print(remainder)  # Вывод: 2

Далее мы рассмотрим этот вопрос более подробно.

Кинга Идем в IT: пошаговый план для смены профессии

Оператор модуля и функция divmod

Использование оператора %

Оператор модуля % позволяет найти остаток: делимое % делитель.

Python
Скопировать код
# Получим остаток от деления 26 на 7 — это 5.
remainder = 26 % 7
print(remainder)  # Вывод: 5

Применение функции divmod() для вычисления частного и остатка

Функция divmod(n, d) возвращает пару значений: частное и остаток.

Python
Скопировать код
# Для чего вообще делать расчеты в уме, если есть divmod? Подсчёт даст (2, 17)
quot, rem = divmod(137, 60)
print(quot, rem)  # Вывод: 2 17

Точность вычислений с math.remainder()

Функция math.remainder() обеспечивает получение точного результата в соответствии со стандартом IEEE 754.

Python
Скопировать код
# Все мы любим точность!
import math
result = math.remainder(137, 60)
print(result)  # Возможен вывод дробного числа

Об использовании оператора целочисленного деления //

Для вычисления только целого частного используйте оператор //.

Python
Скопировать код
# Полная часть и ничего лишнего.
integer_only = 137 // 60
print(integer_only)  # Вывод: 2

Создание своей реализации оператора модуля

Если вы не удовлетворены стандартным оператором, всегда можно написать свой.

Python
Скопировать код
# Создаем наш собственный модуль — делать во всем самостоятельно это по-русски!
def custom_modulo(numerator, denominator):
    if denominator <= 0:
        raise ValueError("Деление на ноль или отрицательное число не допустимо")
    return numerator – ((numerator // denominator) * denominator)

print(custom_modulo(26, 7))  # Вывод: 5

Визуализация

Представьте процесс деления как разделение пиццы на 8 кусков между 7 друзьями. Кто получит последний кусок?

Markdown
Скопировать код
8 кусков пиццы 🍕: [🍽️, 🍽️, 🍽️, 🍽️, 🍽️, 🍽️, 🍽️, ❓]
7 друзей: [👦, 👧, 👦, 👧, 👦, 👧, 👦]

Python легко находит ответ:

Python
Скопировать код
# Пока вы наслаждаетесь отдыхом, Python продолжает работать...
leftover_slice = 8 % 7

А это то, что он нам ответит:

Markdown
Скопировать код
**leftover_slice**: У нас остался последний кусок пиццы 🍕 ❓ = `1`

Остался только один кусок, который ещё не занят! Именно так работает остаток от деления.

Важные моменты и примеры использования

Оператор модуля с отрицательными числами

Вот как должны вести себя отрицательные числа при использовании оператора модуля:

Python
Скопировать код
# Если разделить -26 на 7, то мы получим 14 с остатком -3.
# Но для избавления от отрицательного остатка мы добавляем 7 и получаем 4.
print(-26 % 7)  # Вывод: 4

Проблемы с числами с плавающей точкой

Вот как оператор модуля работает с числами с плавающей точкой:

Python
Скопировать код
# Выполним проверку: 2.5 % 0.1 должно быть немного меньше 2.5.
print(2.5 % 0.1)  # Получается примерно 0.09999999999999973

Деление на ноль

Вспомните, что деление на ноль — это запрещено:

Python
Скопировать код
# Лучше не пытайтесь делить на ноль!
result = 26 % 0

Практическое применение оператора модуля

В реальной жизни оператор модуля может быть очень полезен:

  • Число четное или нечетное?

    Python
    Скопировать код
      number = 42
      if number % 2 == 0:
          print("Четное")
      else:
          print("Нечетное")
  • Циклический перебор элементов списка:

    Python
    Скопировать код
      # Попрощайтесь с возможными ошибками индексов!
      colors = ["red", "green", "blue"]
      for i in range(10):
          color = colors[i % len(colors)]
          print(color)
  • Вычисление дня недели, исходя из числа дней, прошедших с некоторой даты:

    Python
    Скопировать код
      # Давайте взглянем на работу со временем с новой стороны.
      days_since_epoch = 12345
      dayThisWeek = days_since_epoch % 7

Полезные материалы

  1. Python Modulo in Practice: How to Use the % Operator – Real Python — всё, что нужно знать о Python-операторе модуля.
  2. What is the result of % in Python? – Stack Overflow — обсуждение оператора модуля на Stack Overflow.
  3. 6. Expressions — Python 3.12.2 documentation — официальная документация Python по арифметическим операциям, включая модуль.
  4. Python divmod() (with Examples) — примеры использования функции divmod().
  5. Python – Basic Operators — руководство по математическим операторам Python, включая модуль.
  6. Efficient modular exponentiation algorithms – Eli Bendersky's website — подходы к решению задач с модульными вычислениями.
  7. Learn Python 3: Loops Cheatsheet | Codecademy — учебник по циклам Python и операциям с модулем от Codecademy.