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).


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.


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)

47

26% 7 (otrzymasz resztę)

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

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


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)

17

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

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

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.


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

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

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ę.


3
Jeśli używasz Pythona 2, 26/7 = 3, dla Pythona 3, 26/7 to około 3,7142857142857144
Antti A


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.


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)


1
Dodaj działający przykład. Wyjaśnienie części teoretycznego kodu może być trudne do zrozumienia.
mischva11
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.