Finden Sie den Teilungsrest einer Zahl


155

Wie kann ich den Teilungsrest einer Zahl in Python finden?

Beispiel:
Wenn die Zahl 26 und die geteilte Zahl 7 ist, ist der Teilungsrest 5.
(da 7 + 7 + 7 = 21 und 26-21 = 5.)


8
Sieht so aus, als hätte er es bereits getan :)
Chris Dixon

Ich würde vorschlagen, den Modulo- Operator
nachzuschlagen

11
Ich sehe nicht, wo er etwas über Hausaufgaben erwähnt hat
am

Antworten:


204

Sie suchen den Modulo-Operator:

a % b

beispielsweise:

26 % 7

Natürlich wollten sie vielleicht, dass Sie es selbst implementieren, was auch nicht allzu schwierig wäre.


13
Beachten Sie, dass der Modulo-Operator immer eine positive Zahl zurückgibt. Bei negativen Zahlen ist dies möglicherweise nicht das, was Sie erwarten würden, wenn Sie über den Rest sprechen : -10 % 3 == 2. Dies a/b*b + a%b == agilt jedoch immer noch, da Python im Gegensatz zu einigen anderen Sprachen immer in Richtung -Infinity rundet, die in Richtung 0 runden, aber -1 zurückgeben würden.
Marcelj

6
Dies liegt daran, dass Pythons %einen echten Modul ausführt, der Werte für den Bereich zurückgibt [0, divisor)und sich gut mit der Bodenteilung (in Richtung negativer Unendlichkeit) paart. C-Sprachen verwenden den %Operator für Restoperationen, die Werte für den Bereich zurückgeben (-divisor, divisor)und gut mit der Standarddivision (gegen Null) koppeln.
Aaron Franke

196

Der Rest einer Division kann mit dem Operator ermittelt werden %:

>>> 26%7
5

Falls Sie sowohl den Quotienten als auch das Modulo benötigen, gibt es die eingebaute divmodFunktion:

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

47

26% 7 (Sie erhalten den Rest)

26/7 (Sie erhalten Divisor kann Float-Wert sein)

26 // 7 (Sie erhalten nur einen ganzzahligen Divisor-Wert))


18

Wenn Sie Quotienten und Rest in einer Codezeile erhalten möchten (allgemeinerer Anwendungsfall), verwenden Sie:

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

17

Wenn Sie Modulo vermeiden möchten, können Sie auch eine Kombination der vier Grundoperationen verwenden :)

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

15

Ab Python 3.7 gibt es eine neue math.remainder()Funktion:

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

Ausgabe:

-2.0  # not 5

Beachten Sie, wie oben, es ist nicht dasselbe wie %.

Zitieren der Dokumentation :

Mathematik. Rest (x, y)

Geben Sie den IEEE 754-Rest von x in Bezug auf y zurück. Für endliches x und endliches y ungleich Null ist dies die Differenz x - n * y, wobei n die Ganzzahl ist, die dem exakten Wert des Quotienten x / y am nächsten kommt. Wenn x / y genau auf halbem Weg zwischen zwei aufeinanderfolgenden ganzen Zahlen liegt, wird die nächste gerade ganze Zahl für n verwendet. Der Rest r = Rest (x, y) erfüllt somit immer abs (r) <= 0,5 * abs (y).

Sonderfälle folgen IEEE 754: Insbesondere ist der Rest (x, math.inf) x für jedes endliche x, und der Rest (x, 0) und der Rest (math.inf, x) erhöhen den ValueError für jedes Nicht-NaN x. Wenn das Ergebnis der Restoperation Null ist, hat diese Null das gleiche Vorzeichen wie x.

Auf Plattformen mit binärem Gleitkomma IEEE 754 ist das Ergebnis dieser Operation immer genau darstellbar: Es wird kein Rundungsfehler eingeführt.

Issue29962 beschreibt die Gründe für das Erstellen der neuen Funktion.


math.remainder funktioniert möglicherweise nicht wie erwartet Beispiel für Python 3.7 >>> math.remainder (-2.99,2) -0.9900000000000002 >>> math.remainder (-3,2) 1.0
Dominic Barraclough

4

Verwenden Sie beim Teilen das% anstelle des /. Dies wird den Rest für Sie zurückgeben. Also in deinem Fall

26 % 7 = 5

4

Modulo wäre die richtige Antwort, aber wenn Sie es manuell tun, sollte dies funktionieren.

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

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

5
Funktioniert nur, wenn num> = 0 und dif> 0 ist.
12431234123412341234123

4

Wir können dies lösen, indem wir den Moduloperator (%) verwenden.

26% 7 = 5;

aber 26/7 = 3, weil es einen Quotienten gibt, aber der% -Operator den Rest gibt.


3
Wenn Sie Python 2 verwenden, ist 26/7 = 3 für Python 3, 26/7 ungefähr 3.7142857142857144
Antti A


0

Wenn Sie den Rest Ihres Teilungsproblems möchten, verwenden Sie einfach die tatsächlichen Restregeln, genau wie in der Mathematik. Zugegeben, dies gibt Ihnen keine Dezimalausgabe.

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

Wenn Sie dies in einem Taschenrechnerformat machen möchten, ersetzen Sie es einfach valone = 8 durch valone = int(input("Value One")). Machen Sie dasselbe mit valtwo = 3, aber offensichtlich mit verschiedenen Vairables.


du musst valone/valtwoauf int werfen . Andernfalls wird eine Gleitkommazahl erstellt.
Ali Yılmaz

-1

Sie können eine Funktion definieren und sie als Rest mit 2 Werten wie rem (Nummer1, Nummer2) aufrufen, die Nummer1% Nummer2 zurückgeben. Erstellen Sie dann eine Weile und setzen Sie sie auf true. Drucken Sie dann zwei Eingaben für Ihre Funktion aus, die Nummer 1 und 2 enthalten, und drucken Sie dann (rem (Nummer1, Nummer2)


1
Bitte fügen Sie ein Arbeitsbeispiel hinzu. Das Erklären eines theoretischen Codes ist möglicherweise schwer zu verstehen.
mischva11
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.