Целочисленное деление и деление по модулю в Python

1,4K прочитали

Математические операции в программировании выполняются очень часто. Нет ни одной более-менее серьёзной программы, где бы такие операции не использовались. И если сложение, вычитание и умножение не требуют особых пояснений (хотя там вас тоже могут ждать неожиданности, потому что программирование - это не математика), то с делением надо разобраться более внимательно.

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

Во-вторых, деление бывает целочисленным, вещественным и делением по модулю. В таких языках, как Python, нет различия между делением целых и вещественных чисел. Точнее, есть, но на первый взгляд этого не скажешь, и один и тот же оператор / может применяться как для деления целых, так и для деления чисел с плавающей точкой. Однако, например, в Паскале, для целых и вещественных чисел вы должны использовать разные операторы.

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

Обычное деление в Python выполняется обычным, известным со школы, оператором деления (как и в других языках):

x = 100
y = 30
z = x / y # z = 100 / 30 = 3.333...

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

Если же дробная часть вам не нужна, то можно использовать оператор целочисленного деления //:

x = 100
y = 30
z = x // y # z = 100 // 30 = 3

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

Есть также оператор деления по модулю (%), который делит два числа и возвращает остаток от деления:

x = 100
y = 30
z = x % y # z = 100 % 30 = 10

То есть алгоритм такого деления будет примерно такой:

  • 100 // 30 = 3
  • 3 * 30 = 90
  • Результат = 100 - 90 = 10

Оператор деления по модулю может быть весьма полезен. Например, если вы хотите узнать, делится ли число х1 на число х2 без остатка, вы можете выполнить деление по модулю. Если остаток будет равен 0, то число х1 делится на число х2 без остатка.

Ещё одно полезное свойство оператора деления по модулю - это возможность узнать последние цифры числа:

Математические операции в программировании выполняются очень часто. Нет ни одной более-менее серьёзной программы, где бы такие операции не использовались.

То есть если мы выполним деление числа по модулю на 10, то получим последнюю цифру числа, на 100 - две последних цифры числа и так далее.

Ну и напоследок скажу, что оператор целочисленного деления появился в Python 3. В более ранних версиях это было по-другому: оператор / выполнял целочисленное деление, если оба числа были целыми, а если хотя бы одно число было вещественным, то и результат был вещественным.

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.