Question

Qu'est-ce que le % dans un calcul? Je ne peux pas sembler travailler ce qu'il fait.

Est-ce que ça fonctionne un pour cent du calcul par exemple: 4 % 2 est apparemment égal à 0. Comment

Était-ce utile?

La solution

  

% (modulo) opérateur fournit 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 droit zéro soulève l'exception ZeroDivisionError. Les arguments peuvent être des nombres à virgule flottante, par exemple, est égale à 3,14% 0,7 0,34 (3,14 depuis égal à 4 * 0,7 + 0,34). L'opérateur modulo donne toujours un résultat avec le même signe que son second opérande (ou zéro); la valeur absolue du résultat est strictement inférieure à la valeur absolue du second opérande [2].

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

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

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

Donc, pour résumer cela, il retourne le reste d'une opération de division ou 0 s'il n'y a pas de reste. Ainsi, des moyens de 6%2 trouver le reste de 6 divisé par 2.

Autres conseils

Un peu hors sujet, le % est également utilisé dans le formatage de chaîne des opérations telles que %= aux valeurs de substitution dans une chaîne:

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

Encore une fois, hors sujet, mais il semble être une caractéristique peu documenté qui m'a pris du temps pour traquer, et Je pensais qu'il était lié au calcul de pythons pour laquelle cette page SO occupe un rang élevé.

Une expression comme evalue de x % y au reste de x ÷ y - bien, techniquement il est « module » au lieu de « rappel » afin que les résultats peuvent être différents si vous comparez avec d'autres langues où % est l'opérateur reste. Il y a quelques différences subtiles (si vous êtes intéressé par les conséquences pratiques aussi voir « Division entière de Python Pourquoi Floors » plus bas).

Precedence est le même que les opérateurs / (division) et * (multiplication).

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

Python Gotcha : selon la version Python que vous utilisez, % est aussi l'interpolation de chaîne (dépréciée) opérateur, alors faites attention si vous venez d'une langue avec la coulée de type automatique (comme PHP ou JS) où une expression comme '12' % 2 + 3 est légal:. en Python, il se traduira par TypeError: not all arguments converted during string formatting qui sera probablement assez déroutant pour vous

[mise à jour pour Python 3]

Commentaires des internautes de n00p:

  

9/2 est de 4,5 en python. Vous devez faire la division entière comme ceci:. 9 // 2 si vous voulez python pour vous dire combien d'objets tout reste après la division (4)

Pour être précis, la division entière utilisée pour la valeur par défaut en Python 2 (vous l'esprit, cette réponse est plus vieux que mon garçon qui est déjà à l'école et au 2.x temps étaient mainstream):

$ 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

Dans 9 / 2 Python moderne résultats 4.5 en effet:

$ 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

[mise à jour]

dahiya_boy utilisateur a demandé à la session de commentaires:

  

Q Pouvez-vous s'il vous plaît expliquer pourquoi -11 % 5 = 4 -. Dahiya_boy

Ceci est bizarre, non? Si vous essayez ceci en JavaScript:

> -11 % 5
-1

En effet, dans JavaScript % est l'opérateur « reste » tout en Python est l'opérateur « module » (mathématiques d'horloge).

Vous pouvez obtenir l'explication directement à partir GvR :


  

Modifier - dahiya_boy

En Java et iOS -11 % 5 = -1 alors en python et -11 % 5 = 4 rubis.

Eh bien la moitié de la raison est expliquée par le Paulo Scardine , et le repos de l'explication ci-dessous est ici

En Java et iOS, % donne le reste cela signifie que si vous divisez 11% 5 donne Quotient = 2 and remainder = 1 et -11% 5 donne Quotient = -2 and remainder = -1.

Exemple de code dans iOS rapides.

 entrer image description ici

Mais quand on parle en python son module d'horloge donne. Et son travail avec la formule ci-dessous

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

moyens de Thats,

mod(11,5) = 11 - {5 * Floor(11/5)} => 11 - {5 * 2}

Alors, mod(11,5) = 1

mod(-11,5) = -11 - 5 * Floor(11/5) => -11 - {5 * (-3)}

Alors, mod(-11,5) = 4

Exemple de code en python 3.0.

 entrer image description ici


  

Division entière de Python Pourquoi Floors

     

On m'a demandé (encore une fois) aujourd'hui pour expliquer pourquoi la division entière en Python renvoie le plancher du résultat au lieu de tronquer vers zéro comme C.

     

Pour les nombres positifs, il n'y a pas de surprise:

>>> 5//2
2
  

Mais si l'un des opérandesest négatif, le résultat est parqueté, à savoir, arrondie loin de zéro (vers l'infini négatif):

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

Ce dérange certaines personnes, mais il y a une bonne raison mathématique. L'opération de division entière (//) et ses frères et soeurs, l'opération modulo (%), vont de pair et satisfont une belle relation mathématique (toutes les variables sont des nombres entiers):

a/b = q with remainder r
  

tels que

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

(en supposant que a et b sont> = 0).

     

Si vous voulez que la relation de prolonger d'un négatif (maintien positif b), vous avez deux choix: si vous tronquer q vers zéro, r deviendra négatif, de sorte que les changements invariantes à 0 <= abs (r) < sinon, vous pouvez étage q vers l'infini négatif et l'invariant reste 0 <= r      

Dans la théorie des nombres mathématiques, les mathématiciens préfèrent toujours le dernier choix (voir par exemple Wikipedia ). Pour Python, j'ai fait le même choix parce qu'il existe quelques applications intéressantes de l'opération modulo où le signe d'un est sans intérêt. Envisagez de prendre un horodatage POSIX (secondes depuis le début de 1970) et en tournant dans le moment de la journée. Comme il y a 24 * 3600 = 86400 secondes dans une journée, ce calcul est tout simplement t% 86400. Mais si nous devions exprimer fois avant 1970 en utilisant les nombres négatifs, la règle « troncature vers zéro » serait donner un résultat dénué de sens! En utilisant la règle du sol tout fonctionne bien.

     

D'autres applications que j'ai pensé sont des calculs de positions de pixels dans l'infographie. Je suis sûr qu'il ya plus.

     

Pour b négatif, par ailleurs, tout flips juste, et l'invariant devient:

0 >= r > b.
  

Alors pourquoi ne pas C faire de cette façon? Probablement le matériel n'a pas agi au moment C a été conçu. Et le matériel n'a probablement pas le faire de cette façon, car dans le plus vieux matériel, les nombres négatifs étaient représentés comme « signe + amplitude » plutôt que la représentation de complément à deux utilisé de nos jours (au moins pour les entiers). Mon premier ordinateur était un mainframe Control Data et utilisé un complément à des entiers ainsi que des flotteurs. Un modèle de 60 les signifie zéro négatif!

     

Tim Peters, qui sait où tous les squelettes à virgule flottante de Python sont enterrés, a exprimé une certaine inquiétude au sujet de mon désir d'étendre ces règles à flotter modulo point. Il a probablement raison; la règle troncature-vers-infini-négatif peut entraîner une perte de précision pour x% 1,0 lorsque x est un nombre négatif très faible. Mais cela ne suffit pas pour moi de rompre modulo entier, et // est étroitement couplé à cela.

     

PS. Notez que j'utilise // au lieu de / - c'est la syntaxe Python 3, et a également permis en Python 2 à souligner que vous savez que vous invoquez la division entière. Le / opérateur dans le python 2 est ambigu, car il renvoie un résultat différent pour deux opérandes entiers que pour un int et un flotteur ou deux flotteurs. Mais c'est une histoire totalement séparée; voir PEP 238.

     

Publié par Guido van Rossum à 09h49

Le module est une opération mathématique, parfois décrit comme « arithmétique d'horloge. » Je trouve que le décrivant comme un simple reste est trompeur et déroutant, car il masque la vraie raison pour laquelle il est utilisé tant dans la science informatique. Il est vraiment utilisé pour enrouler autour de cycles.

Pensez à une horloge: Supposons que vous regardez une horloge dans le temps « militaire », où la plage de temps passe de 0h00 - 23h59. Maintenant, si vous vouliez quelque chose se passe tous les jours à minuit, vous voulez l'heure actuelle mod 24 égale à zéro:

if (heure% 24 == 0):

Vous pouvez penser à toutes les heures dans l'emballage d'histoire autour d'un cercle de 24 heures plus et plus et l'heure actuelle du jour est ce nombre infiniment long mod 24. Il est un concept beaucoup plus profond qu'un simple reste, il est d'une manière mathématique pour traiter les cycles et il est très important dans la science informatique. Il est également utilisé pour enrouler autour des tableaux, vous permettant d'augmenter l'indice et d'utiliser le module pour envelopper revenir au début après avoir atteint la fin du tableau.

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

  

Modulus - Divise main gauche à la main droite opérande opérandes et retourne reste

a = 10 et b = 20

b% a = 0

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

opérateur% Modulo peut également être utilisé pour les chaînes d'impression (Tout comme en C) tel que défini sur 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 peu hors sujet mais il quelqu'un certainement de l'aide.

En outre, il y a une fonction intégrée utile appelée divmod :

  

divmod (a, b)

     

Prendre deux (non complexe) nombres comme arguments et renvoyer une paire de nombres   constitué par leur quotient et   reste lors de l'utilisation division.

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


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

La division entière peut être fait sur Python 3 aussi, avec l'opérateur //, donc pour obtenir le 7 à la suite, 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

la première ligne de code source dans chaque fichier source.

opérateur Modulus, il est utilisé pour la division reste sur des entiers, en général, mais en Python peut être utilisé pour les nombres à virgule flottante.

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

  

% (modulo) opérateur fournit 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 droit zéro soulève l'exception ZeroDivisionError. Les arguments peuvent être des nombres à virgule flottante, par exemple, est égale à 3,14% 0,7 0,34 (3,14 depuis égal à 4 * 0,7 + 0,34). L'opérateur modulo donne toujours un résultat avec le même signe que son second opérande (ou zéro); la valeur absolue du résultat est strictement inférieure à la valeur absolue du second opérande [2].

Il est une opération modulo, sauf quand il est une ancienne chaîne de style C formatage opérateur, pas une opération modulo . Voir pour plus de détails. Vous verrez beaucoup de cela dans le code existant.

Sachez que

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

même avec les supports résultats à 6,75 au lieu de 7 si elle est calculée en Python 3.4.


Et l'opérateur '/' est pas facile à comprendre, trop (python2.7): essayer ...

- 1/4

1 - 1/4

est un peu hors sujet, mais doit être considéré lors de l'évaluation de l'expression ci-dessus:)

Il est, comme dans de nombreux C comme langues, l'opération reste ou modulo. Consultez la documentation pour les types numériques - int, float, long, complexe.

Modulus - Divise main gauche à la main droite opérande opérandes et retourne reste

.

Si elle aide:

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

... et ainsi de suite.

Il était difficile pour moi de trouver facilement des cas d'utilisation spécifiques pour l'utilisation de% en ligne, par exemple. pourquoi ne fait division module fractionnelle ou le résultat de la division du module négatif dans la réponse qu'il fait. Espérons que cela aide à clarifier des questions comme celle-ci:

Division Modulus En général:

division retourne Modulus le reste d'une opération de division mathématique. Il est le fait comme suit:

Disons que nous avons un dividende de 5 et 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 dans le calcul du module est de la division entière de la conduite:

    x_int = 5 // 2 (entier division en python utilise une double barre oblique)

    x_int = 2

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

    x_mult = x_int * diviseur x_mult = 4

  3. Enfin, le dividende est soustraite de la x_mult

    dividende - x_mult = 1

  4. Le fonctionnement du module, par conséquent, les rendements 1:

    5% 2 = 1

application pour appliquer le module à une fraction

Example: 2 % 5 

Le calcul du module lorsqu'il est appliqué à une fraction est le même que ci-dessus; cependant, il est important de noter que la division entière se traduira par une valeur de zéro lorsque le diviseur est plus grand que le dividende:

dividend = 2 
divisor = 5

La division entière résulte en 0 tandis que le; Par conséquent, lorsque l'étape 3 ci-dessus est effectuée, la valeur du dividende est effectué par (soustrait de zéro):

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

application pour appliquer le module à un négatif

division de plancher se produit 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 faites entier division vous pouvez obtenir un résultat différent de celui que vous attendez!

Appliquer les étapes ci-dessus sur le dividende et le diviseur suivant illustre le concept de module:

dividend: -5 
divisor: 2 

Etape 1: Appliquer la division entière

x_int = -5 // 2  = -3

Etape 2: Multiplier le résultat de la division entière par le diviseur

x_mult = x_int * 2 = -6

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

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

Par conséquent:

-5 % 2 = 1

% (modulo) opérateur fournit 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.

% est href="http://en.wikipedia.org/wiki/Modulo_operation" rel="nofollow"> modulo . 3 % 2 = 1, 4 % 2 = 0

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

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

Il est une opération modulo http://en.wikipedia.org/wiki/Modulo_operation

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

Donc, avec l'ordre des opérations, qui correspond à

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

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

7

1/4 = 0 parce que nous faisons des mathématiques entier ici.

J'ai trouvé que la meilleure façon de saisir l'opérateur de module (%) est par division. Il est le reste et peut être utile pour déterminer un nombre d'être pair ou impair:

4%2 = 0

  2
2|4
 -4
  0


11%3 = 2

  3
3|11
 -9
  2

En général, si vous divisez deux chiffres, il retournera le reste de celui-ci:

Prenez cet exemple: ===> 10% = 3 ..... oui il est 1, Pourquoi

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top