Que fait le %
dans un calcul? Je n'arrive pas à comprendre ce qu'il fait.
Est-ce que cela fonctionne par exemple un pourcentage du calcul: 4 % 2
est apparemment égal à 0. Comment?
L'opérateur% (modulo) produit 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 à droite déclenche l'exception ZeroDivisionError. Les arguments peuvent être des nombres à virgule flottante, par exemple, 3,14% 0,7 est égal à 0,34 (puisque 3,14 est égal à 4 * 0,7 + 0,34). L'opérateur modulo donne toujours un résultat avec le même signe que son deuxième opérande (ou zéro); la valeur absolue du résultat est strictement inférieure à la valeur absolue du deuxième opérande [2].
Tiré de http://docs.python.org/reference/expressions.html
Exemple 1:
6%2
évalue à 0
car il n'y a pas de reste si 6 est divisé par 2 (3 fois).
Exemple 2 : 7%2
évalue à 1
car il y a un reste 1
lorsque 7 est divisé par 2 (3 fois).
Donc pour résumer cela, il renvoie le reste d'une opération de division, ou 0
s'il n'y a pas de reste. Cela 6%2
signifie donc trouver le reste de 6 divisé par 2.
- 21 % 4
est 3 en Python.-11%5 = 4
?Un peu hors sujet, le
%
est également utilisé dans les opérations de formatage de chaînes, comme%=
pour remplacer des valeurs dans une chaîne:Encore une fois, hors sujet, mais cela semble être une fonctionnalité peu documentée qui m'a pris un certain temps à retrouver, et je pensais que c'était lié au calcul modulo de Pythons pour lequel cette page SO se classe très bien.
la source
%=
n'apparaît pas sur cette page%
opérateur a été choisi car il reflète les pourcentages-spécificateurs utilisés dans la chaîne elle-même.Une expression comme
x % y
évalue le reste dex ÷ y
- eh bien, techniquement, c'est "module" au lieu de "rappel", donc les résultats peuvent être différents si vous comparez avec d'autres langues où se%
trouve l'opérateur restant. Il y a quelques différences subtiles (si vous êtes intéressé par les conséquences pratiques, voir également "Pourquoi les étages de division entiers de Python" ci-dessous).La priorité est la même que pour les opérateurs
/
(division) et*
(multiplication).Python gotcha : selon la version Python que vous utilisez,
%
est également l'opérateur d'interpolation de chaîne (obsolète), alors faites attention si vous venez d'un langage avec une conversion automatique de type (comme PHP ou JS) où une expression comme'12' % 2 + 3
est légale: dans Python, il en résulteraTypeError: 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:
Pour être précis, la division entière était la valeur par défaut dans Python 2 (rappelez-vous, cette réponse est plus ancienne que mon garçon qui était déjà à l'école et à l'époque 2.x étaient traditionnels):
Dans les
9 / 2
résultats Python modernes en4.5
effet:[mettre à jour]
L'utilisateur dahiya_boy a demandé lors de la session de commentaires:
C'est bizarre, non? Si vous essayez ceci en JavaScript:
En effet, en JavaScript
%
est l'opérateur "reste" tandis qu'en Python c'est l'opérateur "module" (calcul d'horloge).Vous pouvez obtenir l'explication directement auprès de GvR :
En Java et iOS
-11 % 5 = -1
alors qu'en python et rubis-11 % 5 = 4
.Eh bien la moitié de la raison est expliquée par le Paulo Scardine , et le reste de l'explication est ci-dessous ici
En Java et iOS,
%
donne le reste, ce qui signifie que si vous divisez 11% 5 donneQuotient = 2 and remainder = 1
et -11% 5 donneQuotient = -2 and remainder = -1
.Exemple de code dans iOS rapide.
Mais quand on parle de python, cela donne un module d'horloge. Et son travail avec la formule ci-dessous
mod(a,n) = a - {n * Floor(a/n)}
Cela signifie,
mod(11,5) = 11 - {5 * Floor(11/5)} => 11 - {5 * 2}
Alors,
mod(11,5) = 1
Et
mod(-11,5) = -11 - 5 * Floor(11/5) => -11 - {5 * (-3)}
Alors,
mod(-11,5) = 4
Exemple de code en python 3.0.
la source
help(divmod)
documente l'invariantq, r = divmod(x y) <==> q*y + r == x
.Le module est une opération mathématique, parfois appelée "arithmétique d'horloge". Je trouve que le décrire simplement comme un 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 les cycles.
Pensez à une horloge: supposons que vous regardiez une horloge en temps "militaire", où la plage de temps va de 0:00 à 23.59. Maintenant, si vous vouliez que quelque chose se produise tous les jours à minuit, vous voudriez que l'heure actuelle mod 24 soit zéro:
si (heure% 24 == 0):
Vous pouvez penser à toutes les heures de l'histoire qui tournent autour d'un cercle de 24 heures et plus et l'heure actuelle du jour est ce nombre infiniment long mod 24. C'est un concept beaucoup plus profond que juste un reste, c'est une manière mathématique pour gérer les cycles et c'est très important en informatique. Il est également utilisé pour envelopper les tableaux, vous permettant d'augmenter l'index et d'utiliser le module pour revenir au début après avoir atteint la fin du tableau.
la source
a % b = a - b * floor(a/b)
Python - Opérateurs de base
http://www.tutorialspoint.com/python/python_basic_operators.htm
a = 10 et b = 20
b% a = 0
la source
Dans la plupart des langues,% est utilisé pour le module . Python ne fait pas exception.
la source
L'opérateur% Modulo peut également être utilisé pour imprimer des chaînes (comme en C) comme défini sur Google https://developers.google.com/edu/python/strings .
Cela semble un peu hors sujet, mais cela aidera certainement quelqu'un.
la source
x % y
calcule le reste de la divisionx
divisé pary
où le quotient est un entier . Le reste a le signe dey
.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. Sur Python 21 / 4
donne 0, car le résultat est arrondi.La division entière peut également être effectuée sur Python 3, avec l'
//
opérateur, donc pour obtenir le 7 en conséquence, vous pouvez exécuter:En outre, vous pouvez obtenir la division de style Python sur Python 2, en ajoutant simplement la ligne
comme première ligne de code source dans chaque fichier source.
la source
#
sont des commentaires et//
sont un opérateur.Opérateur de module, il est utilisé pour la division du reste sur les entiers, généralement, mais en Python peut être utilisé pour les nombres à virgule flottante.
http://docs.python.org/reference/expressions.html
la source
Il s'agit d'une opération modulo, sauf lorsqu'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.
la source
En outre, il existe une fonction intégrée utile appelée
divmod
:la source
Soit conscient que
même avec les crochets donne 6,75 au lieu de 7 si calculé en Python 3.4.
Et l'opérateur '/' n'est pas aussi simple à comprendre (python2.7): essayez ...
Ceci est un peu hors sujet ici, mais devrait être pris en compte lors de l'évaluation de l'expression ci-dessus :)
la source
(1)+(0)-(0.25)+(6)
.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 de module fractionnaire ou la division de module négative donne-t-elle la réponse qu'elle fait. 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. Il le fait comme suit:
Supposons que nous ayons un dividende de 5 et un diviseur de 2, l'opération de division suivante serait (équivalente à x):
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
Ensuite, la sortie de x_int est multipliée par le diviseur:
x_mult = x_int * diviseur x_mult = 4
Enfin, le dividende est soustrait du x_mult
dividende - x_mult = 1
L'opération de module renvoie donc 1:
5% 2 = 1
Application pour appliquer le module à une fraction
Le calcul du module appliqué à une fraction est le même que ci-dessus; cependant, il est important de noter que la division entière entraînera une valeur de zéro lorsque le diviseur est supérieur au dividende:
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 appliquée (soustraite de zéro):
Application pour appliquer le module à un négatif
La division du sol se produit dans laquelle la valeur de la division entière est arrondie à la valeur entière la plus basse:
Par conséquent, lorsque vous effectuez une division entière, 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:
Étape 1: appliquer la division entière
Étape 2: Multipliez le résultat de la division entière par le diviseur
Étape 3: Soustrayez le dividende de la variable multipliée, notez le double négatif.
Par conséquent:
la source
L'opérateur% (modulo) produit le reste de la division du premier argument par le second. Les arguments numériques sont d'abord convertis en un type commun.
Ceci est basé sur la priorité de l'opérateur.
la source
%
est modulo .3 % 2 = 1
,4 % 2 = 0
/
est (un entier dans ce cas) une division, donc:la source
C'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, 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 mathématiques entières ici.
la source
Il s'agit, comme dans de nombreux langages de type C, de l'opération restante ou modulo. Voir la documentation pour les types numériques - int, float, long, complex .
la source
Module - Divise l'opérande de gauche par l'opérande de droite et renvoie le reste.
Si cela aide:
... etc.
la source
J'ai trouvé que la façon la plus simple de saisir l'opérateur de module (%) est de passer par une longue division. C'est le reste et peut être utile pour déterminer un nombre pair ou impair:
la source