Знайдіть ділення, що залишилося від числа


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's %виконує справжній модуль, який повертає значення в діапазоні [0, divisor)і добре поєднується з floored поділом (до негативної нескінченності). Мови C використовують %оператор для решти операцій, який повертає значення в діапазоні (-divisor, divisor)і добре поєднується зі стандартним поділом (до нуля).
Аарон Франке

196

Залишок поділу можна виявити за допомогою оператора %:

>>> 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, y)

Поверніть IEEE 754 у стилі x щодо 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
Працює, лише якщо число дорівнює> = 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

2

Залишок можна знайти за допомогою оператора модуля Приклад

a=14
b=10
print(a%b)

Він надрукує 4


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, але, очевидно, різні змінні елементи.


ви повинні віддати valone/valtwoдо int. інакше це призведе до числа з плаванням.
Алі Йылмаз

-1

ви можете визначити функцію та назвати її залишком з двома значеннями, такими як rem (число1, число2), яке повертає число1% число2, а потім створити деякий час і встановити його як істинне, а потім роздрукувати два входи для вашої функції, утримуючи числа 1 і 2, а потім надрукувати (rem (число1, число2)


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