Frage

Was bedeutet die % in einer Berechnung? Ich kann nicht zu funktionieren scheinen, was es tut.

Ist es ein Prozent der Berechnung beispielsweise ausrechnen: 4 % 2 ist offenbar gleich 0. Wie

War es hilfreich?

Lösung

Der% (modulo) -Operator ergibt den Rest aus der Division des ersten Arguments durch die zweite. Die numerischen Argumente werden zunächst in einen gemeinsamen Typ umgewandelt. Ein Null rechtes Argument wirft die Ausnahme Zerodivisionerror. Die Argumente können Gleitkommazahlen werden, beispielsweise 3,14% gleich 0,7 0,34 (3,14, da gleich 4 * 0,7 + 0,34). Der Modulo-Operator immer ein Ergebnis mit dem gleichen Vorzeichen wie dem zweiten Operanden ergibt (oder Null); der Absolutwert des Ergebnisses ist strikt kleiner als der absolute Wert des zweiten Operanden [2].

Genommen von http://docs.python.org/reference/expressions.html

Beispiel 1: 6%2 auswertet zu 0, weil es kein Rest ist, wenn 6 von 2 (3 mal) unterteilt ist.

Beispiel 2 . 7%2 ausgewertet 1 weil ein Rest ist, wenn 1 7 von 2 (3-mal) unterteilt ist

Damit zusammenfassen, es gibt den Rest einer Division oder 0 wenn kein Rest ist. So 6%2 Mittel, um den Rest von 6 geteilt finden von 2.

Andere Tipps

Etwas off topic, die % auch in Zeichenfolge verwendet wird, Operationen wie %= auf Ersatzwerte in einen String Formatierung:

>>> x = 'abc_%(key)s_'
>>> x %= {'key':'value'}
>>> x 
'abc_value_'

Auch hier off topic, aber es scheint ein wenig dokumentiert Merkmal zu sein, die eine Weile nahm mich auf die Spur, und Ich dachte, es zu Pythons Modulorechnung bezogen wurde, für die diese SO Seite hoch zählt.

Ein Ausdruck wie x % y auswertet, um den Rest der x ÷ y - na ja, technisch ist es „Modul“ anstelle von „Erinnerung“ so dass die Ergebnisse unterschiedlich sein können, wenn Sie mit anderen Sprachen vergleichen, wo % der Rest-Operator ist. Es gibt einige feine Unterschiede (wenn Sie in den praktischen Konsequenzen interessiert sind siehe auch „Integer-Division Etagen des Warum Python“ unten).

Präzedenz ist die gleiche wie Betreiber / (Division) und * (Multiplikation).

>>> 9 / 2
4
>>> 9 % 2
1
  • 9 geteilt durch 2 gleich 4 ist.
  • 4 mal 2 8
  • 9 minus 8. 1 - der Rest

Python Gotcha : abhängig von der Python-Version Sie verwenden, % ist auch die (veraltet) string Interpolationsoperator, sieht so aus, wenn Sie von einer Sprache mit automatischer Art Casting kommen, werden (wie PHP oder JS), wo ein Ausdruck wie '12' % 2 + 3 legal ist. in Python es in TypeError: not all arguments converted during string formatting führt die wahrscheinlich ziemlich verwirrend für Sie

[Update für Python 3]

User n00p Kommentare:

9/2 ist 4,5 in Python. Sie müssen Integer-Division tun wie folgt:. 9 // 2, wenn Sie Python Sie sagen wollen, wie viele ganze Objekte nach der Teilung ist links (4)

Um genau zu sein, Integer-Division wurde der Standard in Python 2 (wohlgemerkt, diese Antwort ist älter als mein Junge, der schon in der Schule und zu der Zeit 2.x waren Mainstream) verwendet:

$ python2.7
Python 2.7.10 (default, Oct  6 2017, 22:29:07)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 9 / 2
4
>>> 9 // 2
4
>>> 9 % 2
1

In der modernen Python 9 / 2 Ergebnisse 4.5 in der Tat:

$ python3.6
Python 3.6.1 (default, Apr 27 2017, 00:15:59)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 9 / 2
4.5
>>> 9 // 2
4
>>> 9 % 2
1

[Update]

User dahiya_boy gefragt in der Kommentarsitzung:

F Können Sie mir bitte erklären, warum -11 % 5 = 4 -. Dahiya_boy

Das ist seltsam, nicht wahr? Wenn Sie dies in JavaScript versuchen:

> -11 % 5
-1

Dies liegt daran, in JavaScript % ist der "Rest" Operator, während in Python es der "Modul" (Uhr math) Operator ist.

können Sie erhalten die Erklärung direkt von GvR :


Bearbeiten - dahiya_boy

In Java und iOS -11 % 5 = -1 während in Python und Ruby -11 % 5 = 4.

Nun die Hälfte der Grund erklärt sich durch die Paulo Scardine , und der Rest der Erklärung ist unter hier

In Java und iOS, % den Rest gibt das bedeutet, wenn Sie teilen 11% 5 gibt Quotient = 2 and remainder = 1 und -11% 5 gibt Quotient = -2 and remainder = -1.

Beispielcode in schnellen iOS.

 image description hier

eingeben

Aber wenn wir über in Python reden gibt seinen Taktmodul. Und seine Arbeit mit unter Formel

mod(a,n) = a - {n * Floor(a/n)}

Das ist Mittel,

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.

 image description hier

eingeben

Warum Python Integer-Division Floors

Ich wurde gebeten, (wieder) heute zu erklären, warum Integer-Division in Python den Boden des Ergebnisses zurück statt auf Null wie C Kürzen.

Für positive Zahlen gibt es keine Überraschung:

>>> 5//2
2

Aber wenn einer der Operandennegativ ist, wird das Ergebnis platt, das heißt, abgerundet von Null weg (in Richtung negativ unendlich):

>>> -5//2
-3
>>> 5//-2
-3

Das stört einige Leute, aber es ist ein guter mathematischer Grund. Die ganzzahligen Teilungsoperation (//) und seine Geschwister, die Modulo-Operation (%), gehen zusammen und erfüllen eine schöne mathematische Beziehung (alle Variablen sind ganze Zahlen):

a/b = q with remainder r

, so dass

b*q + r = a and 0 <= r < b

(vorausgesetzt, a und b> = 0).

Wenn Sie die Beziehung wollen für negativ a zu verlängern (b positiv zu halten), haben Sie zwei Möglichkeiten: Wenn Sie q gegen Null gestutzt, r negativ werden wird, so dass die unveränderlichen Änderungen 0 <= abs (r) < andernfalls können Sie Boden q auf negative Unendlichkeit, und die unverändert bleibt 0 <= r

In der mathematischen Zahlentheorie, bevorzugt Mathematiker immer die letztere Wahl (siehe zum Beispiel Wikipedia ). Für Python, machte ich die gleiche Wahl, weil es einige interessante Anwendungen der Modulo-Operation sind, wo das Vorzeichen von a ist uninteressant. Betrachten wir ein POSIX-Zeitstempel (Sekunden seit Beginn des Jahres 1970) zu nehmen und es in die Zeit des Tages drehen. Da es 24 * 3600 = 86.400 Sekunden in einem Tag sind, ist diese Berechnung einfach t% 86400. Aber wenn wir mal ausdrücken sind vor 1970 mit negativen Zahlen, die „truncate gegen Null“ Regel würde ein bedeutungsloses Ergebnis geben! Mit Hilfe der Boden Regel alles funktioniert out in Ordnung.

Andere Anwendungen, die ich gedacht habe von sind Berechnungen von Pixelpositionen in der Computergrafik. Ich bin sicher, es gibt mehr.

Für negative b, nebenbei gesagt, alles nur dreht, und die unveränderliche wird:

0 >= r > b.

Warum also nicht C es auf diese Weise tun? Wahrscheinlich hat die Hardware tun dies nicht zu dem Zeitpunkt C entwickelt wurde. Und die Hardware wahrscheinlich hat es auf diese Weise nicht tun, weil in der ältesten Hardware, negative Zahlen als „Zeichen + Betrag“ dargestellt wurden, anstatt die Zweierkomplement-Darstellung in diesen Tagen (zumindest für ganze Zahlen). Mein erster Computer war ein Mainframe Control Data und es verwendet Einerkomplement für ganze Zahlen sowie Schwimmer. Ein Muster von 60 Einsen bedeutete negativ Null!

Tim Peters, der weiß, wo alle Floating-Point-Skelette des Python begraben sind, hat einige Sorgen um meinen Wunsch geäußert, diese Regeln zu Gleitkomma Modulo zu verlängern. Er ist wahrscheinlich richtig; die truncate-Richtung-negativ-infinity Regel kann Genauigkeitsverlust für x% 1.0 verursachen, wenn x eine sehr kleine negative Zahl ist. Aber das ist nicht genug für mich integer Modulo zu brechen, und // ist eng gekoppelt an das.

PS. Beachten Sie, dass ich verwende // anstelle von / - das ist 3 Python-Syntax, und auch in Python 2 erlaubt zu betonen, dass Sie wissen, dass Sie Integer-Division sind aufgerufen wird. Der / Betreiber in Python 2 mehrdeutig ist, da es ein anderes Ergebnis für zwei ganzzahligen Operanden als für ein int und float eine oder zwei Schwimmern zurückkehrt. Aber das ist eine völlig separate Geschichte; siehe PEP 238.

Veröffentlicht von Guido van Rossum, um 9:49 Uhr

Der Modul ist eine mathematische Operation, manchmal beschrieben als „Takt Arithmetik.“ Ich finde, dass es einfach als ein Rest der Beschreibung ist irreführend und verwirrend, weil es verschleiert die wahre Grund es so viel in der Informatik verwendet wird. Es ist wirklich umschlingen Zyklen verwendet.

Denken Sie an eine Uhr: Angenommen, Sie auf eine Uhr schauen in „military“ Zeit, wo der Bereich der Zeiten von 0:00 geht - 23.59. Nun, wenn Sie etwas passieren jeden Tag um Mitternacht wollten, würden Sie die aktuelle Zeit wollen 24 mod Null zu sein:

if (Stunde% 24 == 0):

können Sie denken an alle Stunden in der Geschichte Verpackung um einen Kreis von 24 Stunden über und über und die aktuelle Stunde des Tages ist, dass unendlich lange Nummer 24. mod Es ist ein viel tiefer Konzept als nur ein Rest, es ist eine mathematische Art und Weise mit Zyklen zu behandeln und es ist in der Informatik sehr wichtig. Es ist auch umschlingen Arrays verwendet, so dass Sie den Index erhöhen und den Modul zu wickeln zurück zum Anfang verwenden, nachdem Sie das Ende des Arrays erreichen.

Python - Grund Operatoren
http://www.tutorialspoint.com/python/python_basic_operators.htm

Modulus - Dividiert linken Operanden mit der rechten Hand Operanden und kehrt Rest

a = 10 und b = 20

b% a = 0

In den meisten Sprachen wird% verwendet für Modul . Python ist keine Ausnahme.

% Modulo Operator kann auch zum Drucken von Zeichenketten verwendet werden (wie in C), wie definiert in Google https://developers.google.com/edu/python/strings .

      # % operator
  text = "%d little pigs come out or I'll %s and %s and %s" % (3, 'huff', 'puff', 'blow down')

Das scheint etwas off topic, aber es wird sicher jemand helfen.

Außerdem gibt es eine nützliche integrierte Funktion namens divmod :

divmod (a, b)

Nehmen Sie zwei (nicht komplexe) Zahlen als Argumente und ein Paar von Zahlen zurückkehren bestehend aus ihren Quotienten und Rest, wenn lange Teilung verwendet wird.

x % y berechnet den Rest der Division durch x y unterteilt, wobei der Quotient eine ganze Zahl . Der Rest hat das Zeichen des y.


Auf Python 3 die Rechnung ergibt 6.75; dies liegt daran, dass die / eine echte Teilung der Fall ist, nicht ganzzahligen Division wie (Standardeinstellung) auf Python 2. Python 2 1 / 4 gibt 0, wie das Ergebnis abgerundet ist.

Die Integer-Division kann 3 auch auf Python getan werden, mit // Operator, wodurch die 7 als Ergebnis zu erhalten, können Sie ausführen:

3 + 2 + 1 - 5 + 4 % 2 - 1 // 4 + 6

Sie können aber auch die Python-Stil Division auf Python 2, erhalten, indem nur das Hinzufügen der Zeile

from __future__ import division

als erste Zeile im Quellcode in jeder Quelldatei.

Modulus-Operator, wird es für Rest Division auf ganze Zahlen verwendet, in der Regel, aber in Python kann für Gleitkommazahlen verwendet werden.

http://docs.python.org/reference/expressions.html

Der% (modulo) -Operator ergibt den Rest aus der Division des ersten Arguments durch die zweite. Die numerischen Argumente werden zunächst in einen gemeinsamen Typ umgewandelt. Ein Null rechtes Argument wirft die Ausnahme Zerodivisionerror. Die Argumente können Gleitkommazahlen werden, beispielsweise 3,14% gleich 0,7 0,34 (3,14, da gleich 4 * 0,7 + 0,34). Der Modulo-Operator immer ein Ergebnis mit dem gleichen Vorzeichen wie dem zweiten Operanden ergibt (oder Null); der Absolutwert des Ergebnisses ist strikt kleiner als der absolute Wert des zweiten Operanden [2].

Es ist eine Modulo-Operation, es sei denn, es ist ein altmodischer C-String Operator Formatierung, kein Modulo-Operation . Siehe hier . Sie werden eine Menge von diesem in vorhandenen Code sehen.

Beachten Sie, dass

(3+2+1-5) + (4%2) - (1/4) + 6

auch mit den Klammern Ergebnisse in 6,75 statt 7, wenn berechnet in Python 3.4.


Und der '/' Operator ist nicht so leicht zu verstehen, auch (python2.7): try ...

- 1/4

1 - 1/4

Das ist ein bisschen off-topic hier, aber sollte in Betracht gezogen werden, wenn die obigen Ausdruck Auswertung:)

Es ist, wie in vieler C-ähnlichen Sprachen, der Rest oder Modulo-Operation. Finden Sie in der Dokumentation für numerische Typen - int, float, lange, komplexer .

Modulus - Dividiert linken Operanden mit der rechten Hand Operanden und kehrt Rest

.

Wenn es hilft:

1:0> 2%6
=> 2
2:0> 8%6
=> 2
3:0> 2%6 == 8%6
=> true

... und so weiter.

Es war schwer für mich leicht spezifische Anwendungsfälle für die Nutzung von Online-% zu finden, z. warum tut fraktionierte Modul Division oder negatives Modul Divisionsergebnis in der Antwort, dass es funktioniert. Hoffe, das hilft Fragen wie diese zu verdeutlichen:

Modulus der Division Allgemeines:

Modulus Division gibt den Rest einer mathematischen Divisionsoperation. Es ist tut es wie folgt:

sagen, wir haben eine Dividende von 5 und Teiler von 2 würde die folgende Teilungsoperation (bis x gleichgesetzt) ??werden:

dividend = 5
divisor = 2

x = 5/2 
  1. Der erste Schritt in der Modul-Berechnung ist zur Durchführung ganzzahlige Division:

    x_int = 5 // 2 (Integer-Division in Python Doppelstrich verwendet)

    x_int = 2

  2. Als nächstes wird der Ausgang des x_int durch den Divisor multipliziert wird:

    x_mult = x_int * Divisor x_mult = 4

  3. Schließlich ist die Dividende aus dem x_mult subtrahiert

    Dividende - x_mult = 1

  4. Der Modul Betrieb daher ergibt 1:

    5% 2 = 1

Anwendung des Moduls auf einen Bruchteil

anzuwenden
Example: 2 % 5 

Die Berechnung des Modulus, wenn auf einen Bruchteil aufgebracht ist das gleiche wie oben; ist es jedoch wichtig zu beachten, dass die Integer-Division in einem Wert von Null ergibt, wenn der Divisor größer ist als die Dividende ist:

dividend = 2 
divisor = 5

Die ganzzahlige Division Ergebnisse in 0, während die; Daher wird, wenn Schritt 3 durchgeführt wird, der Wert der Dividende erfolgt durch (subtrahiert von Null):

dividend - 0 = 2  —> 2 % 5 = 2 

Anwendung des Moduls auf einen negativen

anzuwenden

Bodenteilung auftritt, in dem der Wert der Ganzzahl-Division ist auf die niedrigste ganzzahligen Wert abgerundet:

import math 

x = -1.1
math.floor(-1.1) = -2 

y = 1.1
math.floor = 1

Wenn Sie also Integer-Division tun können Sie ein anderes Ergebnis erhalten, als Sie erwarten!

über die Schritte Auftragen auf einem der folgenden Dividend und Divisor zeigt das Modul-Konzept:

dividend: -5 
divisor: 2 

Schritt 1: Tragen Sie Integer-Division

x_int = -5 // 2  = -3

Schritt 2: Multipliziere das Ergebnis der Integer-Division durch den Divisor

x_mult = x_int * 2 = -6

Schritt 3: Subtrahiert die Dividende von dem multiplizierten variable, bemerkt das doppelt negativ.

dividend - x_mult = -5 -(-6) = 1

Deshalb:

-5 % 2 = 1

Der% (modulo) -Operator ergibt den Rest aus der Division des ersten Arguments durch die zweite. Die numerischen Argumente werden zunächst in einen gemeinsamen Typ umgewandelt wird.

3 + 2 + 1 bis 5 + 4% 2 - 1/4 + 6 = 7

Dies basiert auf Operator Vorrang.

% ist Modulo . 3 % 2 = 1, 4 % 2 = 0

/ ist (eine ganze Zahl in diesem Fall), die Division, also:

3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6
1 + 4%2 - 1/4 + 6
1 + 0 - 0 + 6
7

Es ist eine Modulo-Operation http://en.wikipedia.org/wiki/Modulo_operation

http://docs.python.org/reference/expressions.html

So mit der Reihenfolge der Operationen, die zu ausarbeitet

(3 + 2 + 1-5) + (4% 2) - (1/4) + 6

(1) + (0) - (0) + 6

7

04.01 = 0, weil wir integer math hier tun.

Ich habe festgestellt, dass der einfachste Weg, um den Modulo-Operator (%) ist durch lange Teilung zu erreichen. Es ist der Rest und kann bei der Bestimmung eine Zahl sein gerade oder ungerade nützlich sein:

4%2 = 0

  2
2|4
 -4
  0


11%3 = 2

  3
3|11
 -9
  2

normalerweise, wenn Sie zwei Zahlen teilen, wird es den Rest davon zurückgeben:

Nehmen Sie dieses Beispiel:? ===> 10% 3 = ..... ja, es ist 1, Warum

03.10 = 3 ===> 3 * 3 = 9 ==> 10-9 = 1

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top