web-dev-qa-db-fra.com

Comment fonctionne% en Python?

Qu'est-ce que le % dans un calcul? Je n'arrive pas à comprendre ce que ça fait.

Cela correspond-il à un pourcentage du calcul, par exemple: 3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6 est apparemment égal à 7. Comment?

181
orange

L'opérateur% (modulo) renvoie le reste de la division du premier argument par le second. Les arguments numériques sont d'abord convertis en un type commun. Un argument zéro-droit déclenche l'exception ZeroDivisionError. Les arguments peuvent être des nombres en virgule flottante, par exemple 3,14% 0,7 est égal à 0,34 (puisque 3,14 est égal à 4 * 0,7 + 0,34). la valeur absolue du résultat est strictement inférieure à la valeur absolue du deuxième opérande [2].

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

Exemple 1:6%2 est évalué à 0 car il n'y a pas de reste si 6 est divisé par 2 (3 fois).

Exemple 2: 7%2 est évalué à 1 car il y a un reste de 1 lorsque 7 est divisé par 2 (3 fois).

Donc, pour résumer, il renvoie le reste d’une opération de division, ou 0 s’il n’ya pas de reste. Donc, 6%2 signifie que le reste de 6 est divisé par 2. 

232
meder omuraliev

Quelque peu hors sujet, le % est également utilisé dans des opérations de formatage de chaîne telles que %= pour substituer des valeurs à une chaîne:

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

Encore une fois, hors sujet, mais cela semble être une fonctionnalité un peu documentée qui m'a pris un certain temps à repérer, et Je pensais que cela était lié au calcul modulo en Pythons pour lequel cette page SO se classe en tête 

119
mrmagooey

Une expression comme x % y correspond au reste de x ÷ y. La priorité est identique à celle des opérateurs / (division) et * (multiplication).

>>> 9 / 2
4
>>> 9 % 2
1
  • 9 divisé par 2 est égal à 4.
  • 4 fois 2 soit 8
  • 9 moins 8 est 1 - le reste.

Python gotcha : selon la version de Python que vous utilisez, % est également l'opérateur (déconseillé) d'interpolation de chaînes. Soyez donc vigilant si vous venez d'un langage avec transtypage automatique (comme PHP ou JS ) où une expression comme '12' % 2 + 3 est légale: en Python, cela produira TypeError: not all arguments converted during string formatting qui sera probablement assez déroutant pour vous.

[mise à jour pour Python 3]

Commentaires de l'utilisateur n00p:

9/2 est 4,5 en python. Vous devez faire une division entière comme suit: 9 // 2 si vous voulez que python vous dise le nombre d'objets entiers restant après la division (4).

Pour être précis, la division entière était la valeur par défaut dans Python 2 (remarquez, cette réponse est plus ancienne que mon garçon qui est déjà à l'école):

$ 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

Désormais, dans Python 3, 9 / 2 résulte 4.5, mais gardez à l’esprit que la réponse originale est très ancienne.

$ 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

Le module est une opération mathématique, parfois décrite comme "arithmétique d'horloge". Je trouve que le décrire comme un simple reste est trompeur et déroutant car il masque la vraie raison pour laquelle il est tellement utilisé en informatique. Il est vraiment utilisé pour boucler des cycles. 

Pensez à une horloge: supposons que vous regardiez une horloge en temps "militaire", où la plage de temps va de 0h00 à 23h59. Maintenant, si vous vouliez que quelque chose se passe tous les jours à minuit, vous voudriez que le mod 24 de l'heure actuelle soit à zéro: 

si (heure% 24 == 0): 

Vous pouvez penser à toutes les heures de l'histoire qui se déroulent sans cesse autour d'un cercle de 24 heures et l'heure actuelle de la journée est l'infiniment long nombre mod 24. C'est un concept bien plus profond qu'un simple reste, c'est une manière mathématique pour traiter les cycles et il est très important en informatique. Il est également utilisé pour envelopper les tableaux, ce qui vous permet d'augmenter l'index et d'utiliser le module pour revenir au début une fois que vous avez atteint la fin du tableau. 

39
jarvis01123

Python - Opérateurs de base
http://www.tutorialspoint.com/python/python_basic_operators.htm

Module - Divise l'opérande gauche par l'opérande droit et renvoie le reste

a = 10 et b = 20 

b% a = 0

9
Halil

Dans la plupart des langues,% est utilisé pour module . Python ne fait pas exception.

8
Sorpigal

L'opérateur% Modulo peut également être utilisé pour imprimer des chaînes (comme en C) définies dans 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')

Cela semble détourner l'attention du sujet, mais aidera certainement quelqu'un. 

5
Harshit Chaudhary

x % y calcule le reste de la division x divisé par y le quotient est un entier . Le reste a le signe y.


Sur Python 3, le calcul donne 6.75; C'est parce que le / fait une vraie division, pas une division entière comme (par défaut) sur Python 2. Sous Python 2, 1 / 4 donne 0, le résultat étant arrondi.

La division entière peut également être effectuée sur Python 3, avec l'opérateur //. Ainsi, pour obtenir le 7, vous pouvez exécuter:

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

En outre, vous pouvez obtenir la division de style Python sur Python 2, en ajoutant simplement la ligne

from __future__ import division

en tant que première ligne de code source dans chaque fichier source.

4
Antti Haapala

De plus, il existe une fonction intégrée utile appelée divmod :

divmod (a, b)

Prenez deux nombres (non complexes) comme arguments et retournez une paire de nombres consistant en leur quotient et reste lorsque vous utilisez une longue division.

4
warvariuc

Opérateur Modulus, il est utilisé pour la division du reste sur les entiers, mais en Python, il peut être utilisé pour les nombres à virgule flottante.

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

L'opérateur% (modulo) renvoie le reste de la division du premier argument par le second. Les arguments numériques sont d'abord convertis en un type commun. Un argument zéro-droit déclenche l'exception ZeroDivisionError. Les arguments peuvent être des nombres en virgule flottante, par exemple 3,14% 0,7 est égal à 0,34 (puisque 3,14 est égal à 4 * 0,7 + 0,34). la valeur absolue du résultat est strictement inférieure à la valeur absolue du deuxième opérande [2].

3
wkl

C'est une opération modulo, sauf s'il s'agit d'un opérateur de formatage de chaîne de style C à l'ancienne, et non d'une opération modulo. Voir ici pour plus de détails. Vous verrez beaucoup de cela dans le code existant.

3
John Machin

Soit conscient que 

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

même avec les crochets, le résultat est 6,75 au lieu de 7 s’il est calculé en Python 3.4.


Et l'opérateur '/' n'est pas si facile à comprendre aussi (python2.7): essayez ...

- 1/4

1 - 1/4

Ceci est un peu hors sujet ici, mais devrait être pris en compte lors de l'évaluation de l'expression ci-dessus :)

2
bernhard

Comme dans beaucoup de langages de type C, l’opération reste ou modulo. Voir la documentation pour les types numériques - int, float, long, complex .

1
Andrew Jaffe

Module - Divise l'opérande gauche par l'opérande droit et renvoie le reste.

Si cela aide:

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

... etc.

1
gr8scott06

J'ai trouvé que le moyen le plus simple de saisir l'opérateur de module (%) consiste à effectuer une longue division. C'est le reste et peut être utile pour déterminer un nombre pair ou impair:

4%2 = 0

  2
2|4
 -4
  0


11%3 = 2

  3
3|11
 -9
  2
0
Andrew McNeil

L'opérateur% (modulo) renvoie le reste de la division du premier argument par le second. Les arguments numériques sont d'abord convertis en un type commun.

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

Ceci est basé sur la priorité des opérateurs.

0
user225312

Il était difficile pour moi de trouver facilement des cas d'utilisation spécifiques pour l'utilisation de% en ligne, par exemple. pourquoi la division par module fractionnaire ou la division par module négatif donnent-elles la réponse? J'espère que cela aide à clarifier des questions comme celle-ci:

Division du module en général:

La division de module renvoie le reste d'une opération de division mathématique. C'est le fait comme suit:

Supposons que nous ayons un dividende de 5 et un diviseur de 2, l’opération de division suivante serait (assimilée à x): 

dividend = 5
divisor = 2

x = 5/2 
  1. La première étape du calcul du module consiste à effectuer une division entière: 

    x_int = 5 // 2 (la division entière en python utilise une double barre oblique)

    x_int = 2

  2. Ensuite, la sortie de x_int est multipliée par le diviseur:

    x_mult = x_int * diviseur x_mult = 4

  3. Enfin, le dividende est soustrait du x_mult

    dividende - x_mult = 1 

  4. L'opération de module retourne donc 1:

    5% 2 = 1

Application à appliquer le module à une fraction  

Example: 2 % 5 

Le calcul du module appliqué à une fraction est le même que ci-dessus; toutefois, il est important de noter que la division entière donnera une valeur de zéro lorsque le diviseur est supérieur au dividende:

dividend = 2 
divisor = 5

La division entière donne 0 alors que le; par conséquent, lorsque l'étape 3 ci-dessus est effectuée, la valeur du dividende est reportée (soustraite de zéro):

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

Application à appliquer le module à un négatif  

Il existe une division de plancher dans laquelle la valeur de la division entière est arrondie à la valeur entière la plus basse:

import math 

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

y = 1.1
math.floor = 1

Par conséquent, lorsque vous divisez un nombre entier, vous pouvez obtenir un résultat différent de celui auquel vous vous attendez!

L’application des étapes ci-dessus sur le dividende et le diviseur suivants illustre le concept de module:

dividend: -5 
divisor: 2 

Étape 1: Appliquer la division entière

x_int = -5 // 2  = -3

Étape 2: Multipliez le résultat de la division entière par le diviseur

x_mult = x_int * 2 = -6

Étape 3: Soustrayez le dividende de la variable multipliée, remarquez le double négatif. 

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

Donc:

-5 % 2 = 1
0
N.Atanasov

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

/ est (un entier dans ce cas) la division, donc:

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

C'est une opération modulo http://fr.wikipedia.org/wiki/Modulo_operation

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

Donc, avec l'ordre des opérations, cela revient à

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

7

Le 1/4 = 0 parce que nous faisons des calculs entiers ici.

0
Marc Hughes