Was macht das %
in einer Berechnung? Ich kann nicht herausfinden, was es tut.
Funktioniert es zum Beispiel ein Prozent der Berechnung: 4 % 2
ist anscheinend gleich 0. Wie?
Der% (Modulo) -Operator ergibt den Rest aus der Division des ersten Arguments durch das zweite. Die numerischen Argumente werden zuerst in einen gemeinsamen Typ konvertiert. Ein Null-Rechts-Argument löst die ZeroDivisionError-Ausnahme aus. Die Argumente können Gleitkommazahlen sein, z. B. 3,14% 0,7 entspricht 0,34 (da 3,14 4 * 0,7 + 0,34 entspricht). Der Modulo-Operator liefert immer ein Ergebnis mit demselben Vorzeichen wie sein zweiter Operand (oder Null). Der Absolutwert des Ergebnisses ist streng kleiner als der Absolutwert des zweiten Operanden [2].
Entnommen aus http://docs.python.org/reference/expressions.html
Beispiel 1:
Wird 6%2
ausgewertet, 0
da es keinen Rest gibt, wenn 6 durch 2 geteilt wird (3 Mal).
Beispiel 2 : wird 7%2
ausgewertet, 1
weil es einen Rest gibt, 1
wenn 7 durch 2 geteilt wird (3 Mal).
Zusammenfassend gibt es den Rest einer Divisionsoperation zurück oder 0
wenn es keinen Rest gibt. Also 6%2
bedeutet, den Rest von 6 geteilt durch 2 zu finden.
- 21 % 4
ist 3 in Python.-11%5 = 4
?Etwas abseits des Themas wird das
%
auch bei Formatierungsvorgängen für Zeichenfolgen verwendet,%=
um Werte in eine Zeichenfolge zu ersetzen:Wiederum kein Thema, aber es scheint ein wenig dokumentiertes Feature zu sein, das ich eine Weile gebraucht habe, um es aufzuspüren, und ich dachte, es hängt mit der Pythons-Modulo-Berechnung zusammen, für die diese SO-Seite einen hohen Stellenwert hat.
quelle
%=
erscheint nicht auf dieser Seite%
Operator wurde ausgewählt, weil er die in der Zeichenfolge selbst verwendeten Prozentangaben widerspiegelt .Ein Ausdruck wie wird
x % y
für den Rest vonx ÷ y
- nun, technisch gesehen ist es "Modul" anstelle von "Erinnerung", sodass die Ergebnisse unterschiedlich sein können, wenn Sie mit anderen Sprachen vergleichen, in denen%
sich der Restoperator befindet. Es gibt einige subtile Unterschiede (wenn Sie an den praktischen Konsequenzen interessiert sind, siehe auch "Warum Pythons Integer Division Floors" unten).Die Priorität entspricht den Operatoren
/
(Division) und*
(Multiplikation).Python gotcha : Abhängig von der von Ihnen verwendeten Python-Version
%
ist dies auch der (veraltete) String-Interpolationsoperator. Achten Sie also darauf, ob Sie aus einer Sprache mit automatischer Typumwandlung (wie PHP oder JS) stammen, in der ein Ausdruck wie'12' % 2 + 3
legal ist: in Python wird dazu führen,TypeError: not all arguments converted during string formatting
was für Sie wahrscheinlich ziemlich verwirrend sein wird.[Update für Python 3]
Benutzer n00p Kommentare:
Um genau zu sein, war die Ganzzahldivision in Python 2 die Standardeinstellung (wohlgemerkt, diese Antwort ist älter als mein Junge, der bereits in der Schule ist und zu der Zeit 2.x Mainstream war):
In modernen Python-
9 / 2
Ergebnissen in der4.5
Tat:[aktualisieren]
Benutzer dahiya_boy fragte in der Kommentarsitzung:
Das ist komisch, oder? Wenn Sie dies in JavaScript versuchen:
Dies liegt daran, dass in JavaScript
%
der Operator "Rest" ist, während es in Python der Operator "Modul" (Clock Math) ist.Sie können die Erklärung direkt von GvR erhalten :
In Java und iOS,
-11 % 5 = -1
in Python und Ruby-11 % 5 = 4
.Nun, die Hälfte des Grundes wird von Paulo Scardine erklärt , und der Rest der Erklärung ist hier unten
In Java und iOS,
%
gibt den Rest das bedeutet , wenn Sie teilen 11% 5 gibtQuotient = 2 and remainder = 1
und -11% 5 gibtQuotient = -2 and remainder = -1
.Beispielcode in schnellem iOS.
Aber wenn wir in Python darüber sprechen, gibt es einen Taktmodul. Und seine Arbeit mit der folgenden Formel
mod(a,n) = a - {n * Floor(a/n)}
Das bedeutet,
mod(11,5) = 11 - {5 * Floor(11/5)} => 11 - {5 * 2}
So,
mod(11,5) = 1
Und
mod(-11,5) = -11 - 5 * Floor(11/5) => -11 - {5 * (-3)}
So,
mod(-11,5) = 4
Beispielcode in Python 3.0.
quelle
help(divmod)
dokumentiert die invariantq, r = divmod(x y) <==> q*y + r == x
.Der Modul ist eine mathematische Operation, die manchmal als "Taktarithmetik" bezeichnet wird. Ich finde es irreführend und verwirrend, es einfach als Rest zu beschreiben, weil es den wahren Grund maskiert, warum es in der Informatik so häufig verwendet wird. Es wird wirklich verwendet, um Zyklen zu umwickeln.
Denken Sie an eine Uhr: Angenommen, Sie sehen eine Uhr in "militärischer" Zeit, wobei der Zeitbereich von 0:00 bis 23,59 reicht. Wenn Sie nun möchten, dass jeden Tag um Mitternacht etwas passiert, möchten Sie, dass der aktuelle Zeit-Mod 24 Null ist:
if (Stunde% 24 == 0):
Sie können sich alle Stunden in der Geschichte vorstellen, die sich immer wieder um einen Kreis von 24 Stunden drehen, und die aktuelle Stunde des Tages ist diese unendlich lange Zahl mod 24. Es ist ein viel tieferes Konzept als nur ein Rest, es ist ein mathematischer Weg mit Zyklen umzugehen und es ist sehr wichtig in der Informatik. Es wird auch zum Umschließen von Arrays verwendet, sodass Sie den Index erhöhen und den Modul verwenden können, um nach Erreichen des Endes des Arrays zum Anfang zurückzukehren.
quelle
a % b = a - b * floor(a/b)
Python - Basisoperatoren
http://www.tutorialspoint.com/python/python_basic_operators.htm
a = 10 und b = 20
b% a = 0
quelle
In den meisten Sprachen wird% für den Modul verwendet . Python ist keine Ausnahme.
quelle
Der% Modulo-Operator kann auch zum Drucken von Zeichenfolgen (genau wie in C) verwendet werden, wie in Google https://developers.google.com/edu/python/strings definiert .
Dies scheint ein Thema zu sein, aber es wird sicherlich jemandem helfen.
quelle
x % y
berechnet den Rest der Divisionx
geteilt durch,y
wobei der Quotient eine ganze Zahl ist . Der Rest hat das Zeichen vony
.Auf Python 3 ergibt die Berechnung
6.75
; Dies liegt daran, dass das/
eine echte Division macht, keine ganzzahlige Division wie (standardmäßig) in Python 2. In Python 21 / 4
gibt es 0, da das Ergebnis abgerundet ist.Die Ganzzahldivision kann auch in Python 3 mit dem
//
Operator durchgeführt werden. Um die 7 als Ergebnis zu erhalten, können Sie Folgendes ausführen:Sie können die Python-Stilunterteilung auch in Python 2 erhalten, indem Sie einfach die Zeile hinzufügen
als erste Quellcodezeile in jeder Quelldatei.
quelle
#
ist für Kommentare und//
ist ein Operator.Der Moduloperator wird normalerweise für die Restteilung in Ganzzahlen verwendet, in Python jedoch für Gleitkommazahlen.
http://docs.python.org/reference/expressions.html
quelle
Es handelt sich um eine Modulo-Operation, es sei denn, es handelt sich um einen altmodischen Zeichenfolgenformatierungsoperator im C-Stil, nicht um eine Modulo-Operation . Siehe hier für Details. Sie werden viel davon im vorhandenen Code sehen.
quelle
Außerdem gibt es eine nützliche integrierte Funktion namens
divmod
:quelle
Beachten Sie, dass
Selbst mit den Klammern ergibt sich 6,75 anstelle von 7, wenn in Python 3.4 berechnet.
Und der Operator '/' ist auch nicht so einfach zu verstehen (python2.7): try ...
Dies ist hier etwas abseits des Themas, sollte aber bei der Bewertung des obigen Ausdrucks berücksichtigt werden :)
quelle
(1)+(0)-(0.25)+(6)
.Es war schwierig für mich, bestimmte Anwendungsfälle für die Verwendung von% online zu finden, z. B. warum die Teilung des gebrochenen Moduls oder der negativen Modulteilung zu der Antwort führt, die dies tut. Hoffe, dies hilft, Fragen wie diese zu klären:
Modulteilung Allgemein:
Die Modulteilung gibt den Rest einer mathematischen Teilungsoperation zurück. Es macht es wie folgt:
Angenommen, wir haben eine Dividende von 5 und einen Divisor von 2. Die folgende Divisionsoperation wäre (gleich x):
Der erste Schritt bei der Modulberechnung besteht darin, eine ganzzahlige Division durchzuführen:
x_int = 5 // 2 (Ganzzahldivision in Python verwendet doppelten Schrägstrich)
x_int = 2
Als nächstes wird die Ausgabe von x_int mit dem Divisor multipliziert:
x_mult = x_int * divisor x_mult = 4
Zuletzt wird die Dividende vom x_mult abgezogen
Dividende - x_mult = 1
Die Moduloperation gibt daher 1 zurück:
5% 2 = 1
Anwendung, um den Modul auf einen Bruch anzuwenden
Die Berechnung des Moduls bei Anwendung auf einen Bruch ist dieselbe wie oben; Es ist jedoch wichtig zu beachten, dass die Ganzzahldivision zu einem Wert von Null führt, wenn der Divisor größer als die Dividende ist:
Die ganzzahlige Division ergibt 0, während die; Wenn daher Schritt 3 oben ausgeführt wird, wird der Wert der Dividende durchgeführt (von Null abgezogen):
Anwendung, um den Modul auf ein Negativ anzuwenden
Floor Division tritt auf, bei der der Wert der Integer Division auf den niedrigsten Integer-Wert abgerundet wird:
Wenn Sie also eine ganzzahlige Division durchführen, erhalten Sie möglicherweise ein anderes Ergebnis als erwartet!
Das Anwenden der obigen Schritte auf die folgende Dividende und den Divisor veranschaulicht das Modulkonzept:
Schritt 1: Ganzzahlige Division anwenden
Schritt 2: Multiplizieren Sie das Ergebnis der ganzzahligen Division mit dem Divisor
Schritt 3: Subtrahieren Sie die Dividende von der multiplizierten Variablen und beachten Sie das doppelte Negativ.
Deshalb:
quelle
Der% (Modulo) -Operator ergibt den Rest aus der Division des ersten Arguments durch das zweite. Die numerischen Argumente werden zuerst in einen gemeinsamen Typ konvertiert.
Dies basiert auf der Priorität des Operators.
quelle
%
ist modulo .3 % 2 = 1
,4 % 2 = 0
/
ist (in diesem Fall eine ganze Zahl) Division, also:quelle
Es ist eine Modulo-Operation http://en.wikipedia.org/wiki/Modulo_operation
http://docs.python.org/reference/expressions.html
Mit der Reihenfolge der Operationen klappt das also
(3 + 2 + 1-5) + (4% 2) - (1/4) + 6
(1) + (0) - (0) + 6
7
Die 1/4 = 0, weil wir hier ganzzahlige Mathematik machen.
quelle
Es ist, wie in vielen C-ähnlichen Sprachen, der Rest oder die Modulo-Operation. In der Dokumentation finden Sie numerische Typen - int, float, long, complex .
quelle
Modul - Teilt den linken Operanden durch den rechten Operanden und gibt den Rest zurück.
Wenn es hilft:
... und so weiter.
quelle
Ich habe festgestellt, dass der einfachste Weg, den Moduloperator (%) zu erfassen, die lange Teilung ist. Dies ist der Rest und kann nützlich sein, um eine gerade oder ungerade Zahl zu bestimmen:
quelle