it-swarm.com.de

Wie funktioniert% in Python?

Was beinhaltet der % in einer Berechnung? Ich kann nicht herausfinden, was es bewirkt.

Kommt es beispielsweise zu einem Prozentsatz der Berechnung: 3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6 ist anscheinend gleich 7. Wie?

181
orange

Der Operator% (modulo) ergibt den Rest aus der Division des ersten Arguments durch das zweite. Die numerischen Argumente werden zuerst in einen allgemeinen Typ konvertiert. Ein Zero-Right-Argument löst die ZeroDivisionError-Ausnahme aus. Die Argumente können Gleitkommazahlen sein, z. B. 3,14% 0,7 ist gleich 0,34 (da 3,14 gleich 4 * 0,7 + 0,34 ist). Der Modulo-Operator liefert immer ein Ergebnis mit demselben Vorzeichen wie sein zweiter Operand (oder Null); der absolute Wert des Ergebnisses ist strikt kleiner als der absolute Wert des zweiten Operanden [2].

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

Beispiel 1:6%2 wird zu 0 ausgewertet, da es keinen Rest gibt, wenn 6 durch 3 (3-mal) geteilt wird.

Beispiel 2: 7%2 wird zu 1 ausgewertet, da ein Rest von 1 vorhanden ist, wenn 7 durch 3 (3-mal) geteilt wird.

Zusammenfassend lässt sich sagen, dass der Rest eines Divisionsvorgangs oder 0 zurückgegeben wird, wenn es keinen Rest gibt. 6%2 bedeutet also, den Rest von 6 durch 2 geteilt zu finden. 

232
meder omuraliev

Etwas außerhalb des Themas wird % auch in String-Formatierungsoperationen wie %= verwendet, um Werte in einen String zu ersetzen:

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

Wieder ein Thema, aber es scheint ein wenig dokumentiertes Feature zu sein, das ich eine Weile brauchte, um herauszufinden, und Ich dachte, dass es mit Pythons Modulo-Berechnungen zusammenhängt, für die diese SO -Seite einen hohen Stellenwert hat. 

119
mrmagooey

Ein Ausdruck wie x % y wird zu dem Rest von x ÷ y ausgewertet. Der Vorrang ist der Operator / (Division) und * (Multiplikation).

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

Python gotcha : Abhängig von der verwendeten Python-Version ist % auch der (veraltete) String-Interpolationsoperator. Achten Sie also darauf, ob Sie aus einer Sprache mit automatischer Typumwandlung (wie PHP oder JS) kommen ) wo ein Ausdruck wie '12' % 2 + 3 zulässig ist: In Python führt dies zu TypeError: not all arguments converted during string formatting, was für Sie ziemlich verwirrend sein wird.

[Update für Python 3]

N00p-Kommentare von Benutzern:

9/2 ist 4,5 in Python. Sie müssen eine Ganzzahldivision wie folgt ausführen: 9 // 2, wenn Python Ihnen mitteilen soll, wie viele Objekte nach der Division übrig bleiben (4).

Um genau zu sein, war die Integer-Division in Python 2 die Standardeinstellung (allerdings ist diese Antwort älter als mein Junge, der bereits in der Schule ist):

$ 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 Python 3 ergibt 9 / 2 zwar 4.5, aber die ursprüngliche Antwort ist sehr alt.

$ 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
42
Paulo Scardine

Der Modul ist eine mathematische Operation, die manchmal als "Uhrenarithmetik" bezeichnet wird. Ich halte es für irreführend und verwirrend, es als einen Rest zu bezeichnen, weil es den wahren Grund verdeckt, warum es in der Informatik so häufig verwendet wird. Es wird wirklich zum Umwickeln von Zyklen verwendet. 

Denken Sie an eine Uhr: Angenommen, Sie schauen auf eine Uhr in "militärischer" Zeit, deren Zeitspanne zwischen 0:00 und 23,59 liegt. Wenn Sie jeden Tag um Mitternacht etwas erreichen möchten, möchten Sie, dass die aktuelle Uhrzeit von Mod 24 gleich Null ist: 

if (Stunde% 24 == 0): 

Man kann 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 eine unendlich lange Zahl Mod 24. Es ist ein viel tieferes Konzept als nur ein Rest, es ist ein mathematischer Weg mit Zyklen umzugehen, ist in der Informatik sehr wichtig. Es wird auch verwendet, um Arrays zu umbrechen, sodass Sie den Index erhöhen und den Modulus verwenden können, um nach dem Ende des Arrays an den Anfang zurückzukehren. 

39
jarvis01123

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

Modul - Teilt den linken Operanden durch den rechten Operanden und gibt den Rest zurück

a = 10 und b = 20 

b% a = 0

9
Halil

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

8
Sorpigal

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

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

Das scheint das Thema etwas abzubeißen, aber es wird sicherlich jemandem helfen. 

5

x % y berechnet den Rest der Division x geteilt durch y, wobei der Quotient eine ganze Zahl ist. Der Rest hat das Vorzeichen von y.


Auf Python 3 ergibt die Berechnung 6.75; Dies liegt daran, dass / eine echte Division durchführt, keine ganzzahlige Division, wie (standardmäßig) in Python 2. Auf Python 2 gibt 1 / 4 0, da das Ergebnis abgerundet wird.

Die Ganzzahleinteilung kann auch auf Python 3 mit dem //-Operator durchgeführt werden. Um also die 7 als Ergebnis zu erhalten, können Sie Folgendes ausführen:

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

Sie können auch die Python-Stilaufteilung in Python 2 erhalten, indem Sie einfach die Zeile hinzufügen

from __future__ import division

als erste Quellcodezeile in jeder Quelldatei.

4
Antti Haapala

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

divmod (a, b)

Nehmen Sie zwei (nicht komplexe) Zahlen als Argumente und geben Sie ein Zahlenpaar zurück bestehend aus ihrem Quotienten und Rest bei Verwendung der langen Teilung.

4
warvariuc

Der Modul-Operator wird normalerweise für die Restaufteilung in Ganzzahlen verwendet. In Python kann er jedoch für Gleitkommazahlen verwendet werden.

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

Der Operator% (modulo) ergibt den Rest aus der Division des ersten Arguments durch das zweite. Die numerischen Argumente werden zuerst in einen allgemeinen Typ konvertiert. Ein Zero-Right-Argument löst die ZeroDivisionError-Ausnahme aus. Die Argumente können Gleitkommazahlen sein, z. B. 3,14% 0,7 ist gleich 0,34 (da 3,14 gleich 4 * 0,7 + 0,34 ist). Der Modulo-Operator liefert immer ein Ergebnis mit demselben Vorzeichen wie sein zweiter Operand (oder Null); der absolute Wert des Ergebnisses ist strikt kleiner als der absolute Wert des zweiten Operanden [2].

3
wkl

Dies ist eine Modulo-Operation, es sei denn, es handelt sich um einen altmodischen String-Formatierungsoperator im C-Stil, keine Modulo-Operation. hier für Details. Sie werden viel davon in vorhandenem Code sehen.

3
John Machin

Beachten Sie, dass 

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

selbst mit den Klammern ergibt sich 675 anstelle von 7, wenn in Python 3.4 berechnet.


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

- 1/4

1 - 1/4

Dies ist ein wenig abseits hier, sollte aber bei der Auswertung des obigen Ausdrucks berücksichtigt werden :)

2
bernhard

Es ist, wie in vielen C-ähnlichen Sprachen, der Rest- oder Modulo-Betrieb. In der Dokumentation finden Sie numerische Typen - int, float, long, complex .

1
Andrew Jaffe

Modul - Teilt den linken Operanden durch den rechten und den Rest.

Wenn es hilft:

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

... und so weiter.

1
gr8scott06

Ich habe festgestellt, dass der Moduloperator (%) am einfachsten durch eine lange Division zu erfassen ist. Es ist der Rest und kann nützlich sein, um eine gerade oder ungerade Zahl zu bestimmen:

4%2 = 0

  2
2|4
 -4
  0


11%3 = 2

  3
3|11
 -9
  2
0
Andrew McNeil

Der Operator% (modulo) ergibt den Rest aus der Division des ersten Arguments durch das zweite. Die numerischen Argumente werden zuerst in einen allgemeinen Typ konvertiert.

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

Dies basiert auf der Bedienerpriorität.

0
user225312

Es fiel mir schwer, spezifische Anwendungsfälle für die Verwendung von% online zu finden, z. Warum führt die fraktionale Modulteilung oder die negative Modulteilung zu der Antwort, die es tut. Ich hoffe, das hilft, Fragen wie diese zu klären:

Modulteilung Allgemein:

Die Moduldivision gibt den Rest einer mathematischen Divisionsoperation zurück. Es ist wie folgt:

Angenommen, wir haben eine Dividende von 5 und einen Divisor von 2, die folgende Divisionsoperation wäre (gleich x): 

dividend = 5
divisor = 2

x = 5/2 
  1. Der erste Schritt bei der Berechnung des Moduls ist das Durchführen einer Ganzzahldivision: 

    x_int = 5 // 2 (ganzzahlige Division in Python verwendet doppelten Schrägstrich)

    x_int = 2

  2. Als Nächstes wird die Ausgabe von x_int mit dem Divisor multipliziert:

    x_mult = x_int * divisor x_mult = 4

  3. Zuletzt wird die Dividende vom x_mult abgezogen

    dividende - x_mult = 1 

  4. Die Moduloperation gibt daher 1 zurück:

    5% 2 = 1

Anwendung zum Anwenden des Moduls auf einen Bruch  

Example: 2 % 5 

Die Berechnung des Moduls bei der Anwendung auf einen Bruch ist derselbe wie oben; Es ist jedoch wichtig zu beachten, dass die Ganzzahldivision zu einem Wert von Null führt, wenn der Divisor größer als der Dividend ist:

dividend = 2 
divisor = 5

Die ganzzahlige Division ergibt 0, während das; Wenn daher Schritt 3 oben ausgeführt wird, wird der Wert des Dividenden (von null abgezogen) durchgerechnet:

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

Anwendung zum Anwenden des Moduls auf ein negatives  

Die Bodendivision tritt auf, bei der der Wert der Ganzzahldivision auf den niedrigsten Integerwert abgerundet wird:

import math 

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

y = 1.1
math.floor = 1

Wenn Sie also eine Ganzzahldivision durchführen, erzielen Sie möglicherweise ein anderes Ergebnis als erwartet.

Die Anwendung der obigen Schritte auf die folgende Dividende und den Divisor veranschaulicht das Modulkonzept:

dividend: -5 
divisor: 2 

Schritt 1: Anwenden einer ganzzahligen Division

x_int = -5 // 2  = -3

Schritt 2: Multiplizieren Sie das Ergebnis der ganzzahligen Division mit dem Divisor

x_mult = x_int * 2 = -6

Schritt 3: Ziehen Sie die Dividende von der multiplizierten Variablen ab und beachten Sie das Doppelte negativ. 

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

Deshalb:

-5 % 2 = 1
0
N.Atanasov

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

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

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

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 ganze Zahlen berechnen.

0
Marc Hughes