Найти остаток от деления числа


155

Как я могу найти остаток от деления числа в Python?

Например:
если число равно 26, а разделенное число равно 7, то остаток от деления равен 5.
(так как 7 + 7 + 7 = 21 и 26-21 = 5).


8
Похоже, он уже сделал :)
Крис Диксон

Я бы посоветовал посмотреть на оператора по модулю
yurib

11
Я не вижу, где он упомянул что-нибудь о домашней работе
p1l0t

Ответы:


205

Вы ищете оператора по модулю:

a % b

например:

26 % 7

Конечно, может быть, они хотели, чтобы вы реализовали это сами, что также не было бы слишком сложно.


13
Обратите внимание , что оператор по модулю всегда возвращает положительное число, так и для отрицательных чисел не может быть то , что можно было бы ожидать , когда речь идет об остатке: -10 % 3 == 2. Однако a/b*b + a%b == aвсе еще остается верным, поскольку python всегда округляется к -Infinity, в отличие от некоторых других языков, которые округляются к 0, но возвращают -1.
marcelj

6
Это связано с тем, что Python %выполняет истинный модуль, который возвращает значения в диапазоне [0, divisor)и хорошо сочетается с разделением по этажам (к отрицательной бесконечности). Языки C используют %оператор для операций с остатками, который возвращает значения в диапазоне (-divisor, divisor)и хорошо сочетается со стандартным делением (к нулю).
Аарон Франке

197

Остальная часть деления может быть обнаружена с помощью оператора %:

>>> 26%7
5

В случае, если вам нужно и частное, и по модулю, есть встроенная divmodфункция:

>>> seconds= 137
>>> minutes, seconds= divmod(seconds, 60)

47

26% 7 (вы получите остаток)

26/7 (у вас получится делитель, может иметь значение с плавающей запятой)

26 // 7 (делитель получит только целое значение))


18

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

quotient, remainder = divmod(dividend, divisor)
#or
divmod(26, 7)

17

Если вы хотите избежать по модулю, вы также можете использовать комбинацию из четырех основных операций :)

26 - (26 // 7 * 7) = 5

16

В Python 3.7 появилась новая math.remainder()функция:

from math import remainder
print(remainder(26,7))

Вывод:

-2.0  # not 5

Обратите внимание, как и выше, это не то же самое, что %.

Цитирование документации :

математика остаток (х, у)

Верните остаток x в стиле IEEE 754 относительно y. Для конечного x и конечного ненулевого y это разность x - n * y, где n - ближайшее целое число к точному значению фактора x / y. Если x / y находится точно посередине между двумя последовательными целыми числами, ближайшее четное целое число используется для n. Таким образом, остаток r = остаток (x, y) всегда удовлетворяет abs (r) <= 0.5 * abs (y).

Особые случаи следуют IEEE 754: в частности, остаток (x, math.inf) равен x для любого конечного x, а остаток (x, 0) и остаток (math.inf, x) вызывают ValueError для любого не NaN x. Если результат операции остатка равен нулю, этот ноль будет иметь тот же знак, что и x.

На платформах, использующих двоичную с плавающей точкой IEEE 754, результат этой операции всегда точно представлен: ошибка округления не вводится.

Issue29962 описывает обоснование для создания новой функции.


math.remainder может работать не так, как вы ожидаете, пример для python 3.7 >>> math.remainder (-2.99,2) -0.9900000000000002 >>> math.remainder (-3,2) 1.0
Доминик Барракло


4

Модуло будет правильным ответом, но если вы делаете это вручную, это должно сработать.

num = input("Enter a number: ")
div = input("Enter a divisor: ")

while num >= div:
    num -= div
print num

5
Работает только если num>> 0 и dif> 0.
12431234123412341234123

4

Мы можем решить это с помощью оператора модуля (%)

26% 7 = 5;

но 26/7 = 3, потому что это даст частное, а оператор% даст остаток.


3
Если вы используете Python 2, 26/7 = 3, для Python 3 значение 26/7 составляет около 3,7142857142857144
Antti A


0

Если вы хотите получить остаток от своей проблемы деления, просто используйте действительные правила остатка, как в математике. Конечно, это не даст вам десятичный вывод.

valone = 8
valtwo = 3
x = valone / valtwo
r = valone - (valtwo * x)
print "Answer: %s with a remainder of %s" % (x, r)

Если вы хотите сделать это в формате калькулятора, просто замените valone = 8 на valone = int(input("Value One")). Сделайте то же самое с valtwo = 3, но разные vairables очевидно.


Вы должны привести valone/valtwoк Int. иначе это приведет к числу с плавающей точкой.
Али Йылмаз

-1

Вы можете определить функцию и вызвать ее остаток с двумя значениями, такими как rem (номер1, номер2), который возвращает число1%, число2, затем создать время и установить его в значение true, затем распечатать два ввода для вашей функции, содержащей числа 1 и 2, и затем напечатать (rem (число1, число2)


1
Пожалуйста, добавьте рабочий пример. Объяснение некоторого теоретического кода может быть трудным для понимания.
mischva11
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.