Znajdź pozostałą część liczby

155

Jak mogę znaleźć pozostałą część liczby z dzielenia w Pythonie?

Na przykład:
jeśli liczba to 26, a liczba podzielona to 7, to reszta z dzielenia to 5.
(ponieważ 7 + 7 + 7 = 21 i 26-21 = 5).

Pion
źródło
8
Wygląda na to, że już to zrobił :)
Chris Dixon
Proponuję poszukać operatora modulo
yurib
11
Nie widzę, gdzie wspomniał cokolwiek o
zadaniach

Odpowiedzi:

205

szukasz operatora modulo:

a % b

na przykład:

26 % 7

Oczywiście, może chcieli, żebyś sam to wdrożył, co też nie byłoby zbyt trudne.

Uku Loskit
źródło
13
Należy pamiętać, że operator modulo zawsze zwraca liczbę dodatnią, więc dla liczb ujemnych nie może być to, czego można się spodziewać, gdy mówimy o pozostałą: -10 % 3 == 2. Jednak a/b*b + a%b == anadal jest prawdą, ponieważ python zawsze zaokrągla w kierunku -Infinity, w przeciwieństwie do niektórych innych języków, które zaokrągla w kierunku 0, ale zwróci -1.
marcelj
6
Dzieje się tak, ponieważ Python %wykonuje prawdziwy moduł, który zwraca wartości z zakresu [0, divisor)i dobrze łączy się w pary z dzieleniem zmiennoprzecinkowym (w kierunku ujemnej nieskończoności). Języki C używają %operatora do operacji na resztach, które zwracają wartości z zakresu (-divisor, divisor)i dobrze łączą się ze standardowym dzieleniem (w kierunku zera).
Aaron Franke
196

Pozostałą część podziału można znaleźć za pomocą operatora %:

>>> 26%7
5

W przypadku, gdy potrzebujesz zarówno ilorazu, jak i modulo, jest wbudowana divmodfunkcja:

>>> seconds= 137
>>> minutes, seconds= divmod(seconds, 60)
tzot
źródło
47

26% 7 (otrzymasz resztę)

26/7 (otrzymasz dzielnik może być wartością zmiennoprzecinkową)

26 // 7 (otrzymasz dzielnik tylko jako liczbę całkowitą))

Karush Mahajan
źródło
18

Jeśli chcesz uzyskać iloraz i resztę w jednej linii kodu (bardziej ogólny przypadek użycia), użyj:

quotient, remainder = divmod(dividend, divisor)
#or
divmod(26, 7)
Alok Nayak
źródło
17

Jeśli chcesz uniknąć modulo, możesz również użyć kombinacji czterech podstawowych operacji :)

26 - (26 // 7 * 7) = 5
alys
źródło
15

W Pythonie 3.7 jest nowa math.remainder()funkcja:

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

Wynik:

-2.0  # not 5

Uwaga, jak wyżej, to nie to samo, co %.

Cytując dokumentację :

matematyka. reszta (x, y)

Zwraca resztę x w stylu IEEE 754 w odniesieniu do y. Dla skończonego x i skończonego niezerowego y, jest to różnica x - n * y, gdzie n jest liczbą całkowitą najbliższą dokładnej wartości ilorazu x / y. Jeśli x / y jest dokładnie w połowie odległości między dwiema kolejnymi liczbami całkowitymi, dla n używana jest najbliższa parzysta liczba całkowita. Reszta r = reszta (x, y) zatem zawsze spełnia abs (r) <= 0,5 * abs (y).

Przypadki specjalne są zgodne z IEEE 754: w szczególności reszta (x, math.inf) to x dla dowolnego skończonego x, a reszta (x, 0) i reszta (math.inf, x) podnoszą wartość ValueError dla dowolnego nie-NaN x. Jeśli wynik operacji reszty jest zerowy, to zero będzie miało ten sam znak co x.

Na platformach używających binarnych liczb zmiennoprzecinkowych IEEE 754 wynik tej operacji jest zawsze dokładnie reprezentowalny: nie jest wprowadzany błąd zaokrąglania.

W numerze 29962 opisano uzasadnienie utworzenia nowej funkcji.

Chris_Rands
źródło
math.remainder może nie działać tak, jak się spodziewasz, przykład dla Pythona 3.7 >>> math.remainder (-2.99,2) -0.9900000000000002 >>> math.remainder (-3,2) 1.0
Dominic Barraclough
4

Podczas dzielenia używaj% zamiast /. To zwróci ci resztę. Więc w twoim przypadku

26 % 7 = 5
Bender the Greatest
źródło
4

Modulo byłoby poprawną odpowiedzią, ale jeśli robisz to ręcznie, powinno to działać.

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

while num >= div:
    num -= div
print num
Bednarz
źródło
5
Działa tylko wtedy, gdy num jest> = 0 i dif> 0.
12431234123412341234123
4

Możemy to rozwiązać za pomocą operatora modułu (%)

26% 7 = 5;

ale 26/7 = 3, ponieważ da to iloraz, ale operator% da resztę.

KATTAMURU ANIL
źródło
3
Jeśli używasz Pythona 2, 26/7 = 3, dla Pythona 3, 26/7 to około 3,7142857142857144
Antti A
2

Możesz znaleźć resztę za pomocą operatora modulo Przykład

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

Wydrukuje 4

Swarnima Shishodia
źródło
0

Jeśli chcesz resztę swojego problemu z dzieleniem, po prostu użyj rzeczywistych reguł reszty, tak jak w matematyce. To prawda, że ​​nie da ci to wyniku dziesiętnego.

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

Jeśli chcesz, aby ten w formacie kalkulatora, wystarczy podstawić valone = 8 z valone = int(input("Value One")). Zrób to samo valtwo = 3, ale oczywiście z różnymi wartościami.

S. Ahmad
źródło
musisz rzucić valone/valtwona int. w przeciwnym razie da to liczbę zmiennoprzecinkową.
Ali Yılmaz
-1

możesz zdefiniować funkcję i wywołać ją resztą z 2 wartościami, takimi jak rem (liczba1, liczba2), która zwraca liczbę1% liczba2, a następnie utworzyć chwilę i ustawić ją na wartość true, a następnie wydrukować dwa wejścia dla Twojej funkcji o numerach 1 i 2 i wypisać (rem (liczba1, liczba2)

user13790410
źródło
1
Dodaj działający przykład. Wyjaśnienie części teoretycznego kodu może być trudne do zrozumienia.
mischva11