Trouver le reste de la division d'un nombre


155

Comment pourrais-je trouver le reste de la division d'un nombre en Python?

Par exemple:
Si le nombre est 26 et le nombre divisé est 7, le reste de la division est 5.
(puisque 7 + 7 + 7 = 21 et 26-21 = 5.)


8
On dirait qu'il l'a déjà fait :)
Chris Dixon

Je suggère de rechercher l' opérateur modulo
yurib

11
Je ne vois pas où il a mentionné quoi que ce soit à propos des devoirs
p1l0t

Réponses:


205

vous recherchez l'opérateur modulo:

a % b

par exemple:

26 % 7

Bien sûr, ils voulaient peut-être que vous l'implémentiez vous-même, ce qui ne serait pas trop difficile non plus.


13
Notez que l'opérateur modulo renvoie toujours un nombre positif, donc pour les nombres négatifs qu'il pourrait ne pas être ce que vous attendez quand on parle du reste: -10 % 3 == 2. Cependant, c'est a/b*b + a%b == atoujours vrai, puisque python arrondit toujours vers -Infinity, contrairement à certains autres langages, qui arrondissent vers 0 mais renverraient -1.
marcelj

6
C'est parce que Python %exécute un vrai module, qui renvoie des valeurs sur la plage [0, divisor)et se marie bien avec une division par étage (vers l'infini négatif). Les langages C utilisent l' %opérateur pour les opérations de reste qui renvoie des valeurs sur la plage (-divisor, divisor)et se marie bien avec la division standard (vers zéro).
Aaron Franke

196

Le reste d'une division peut être découvert à l'aide de l'opérateur %:

>>> 26%7
5

Si vous avez besoin à la fois du quotient et du modulo, il y a la divmodfonction intégrée :

>>> seconds= 137
>>> minutes, seconds= divmod(seconds, 60)

47

26% 7 (vous obtiendrez le reste)

26/7 (vous obtiendrez le diviseur peut être une valeur flottante)

26 // 7 (vous obtiendrez un diviseur uniquement une valeur entière))


18

Si vous voulez obtenir le quotient et le reste dans une ligne de code (cas d'utilisation plus général), utilisez:

quotient, remainder = divmod(dividend, divisor)
#or
divmod(26, 7)

17

Si vous voulez éviter le modulo, vous pouvez également utiliser une combinaison des quatre opérations de base :)

26 - (26 // 7 * 7) = 5

16

Depuis Python 3.7, il y a une nouvelle math.remainder()fonction:

from math import remainder
print(remainder(26,7))

Production:

-2.0  # not 5

Notez, comme ci-dessus, ce n'est pas la même chose que %.

Citant la documentation :

math. reste (x, y)

Renvoie le reste de x de style IEEE 754 par rapport à y. Pour x fini et y non nul, il s'agit de la différence x - n * y, où n est l'entier le plus proche de la valeur exacte du quotient x / y. Si x / y est exactement à mi-chemin entre deux entiers consécutifs, l'entier pair le plus proche est utilisé pour n. Le reste r = reste (x, y) satisfait donc toujours abs (r) <= 0.5 * abs (y).

Les cas spéciaux suivent IEEE 754: en particulier, le reste (x, math.inf) est x pour tout x fini, et le reste (x, 0) et le reste (math.inf, x) lèvent ValueError pour tout x non-NaN. Si le résultat de l'opération de reste est zéro, ce zéro aura le même signe que x.

Sur les plates-formes utilisant la virgule flottante binaire IEEE 754, le résultat de cette opération est toujours exactement représentable: aucune erreur d'arrondi n'est introduite.

Le numéro 29962 décrit la justification de la création de la nouvelle fonction.


math.remainder peut ne pas fonctionner comme vous le souhaitez exemple pour python 3.7 >>> math.remainder (-2.99,2) -0.9900000000000002 >>> math.remainder (-3,2) 1.0
Dominic Barraclough


4

Modulo serait la bonne réponse, mais si vous le faites manuellement, cela devrait fonctionner.

num = input("Enter a number: ")
div = input("Enter a divisor: ")

while num >= div:
    num -= div
print num

5
Fonctionne uniquement si num est> = 0 et dif> 0.
12431234123412341234123

4

Nous pouvons résoudre cela en utilisant l'opérateur de module (%)

26% 7 = 5;

mais 26/7 = 3 car il donnera le quotient mais l'opérateur% donnera le reste.


3
Si vous utilisez Python 2, 26/7 = 3, pour Python 3, 26/7 équivaut à environ 3,7142857142857144
Antti A

2

Vous pouvez trouver le reste en utilisant l'opérateur modulo Exemple

a=14
b=10
print(a%b)

Il imprimera 4


0

Si vous voulez le reste de votre problème de division, utilisez simplement les règles du reste, comme en mathématiques. Certes, cela ne vous donnera pas une sortie décimale.

valone = 8
valtwo = 3
x = valone / valtwo
r = valone - (valtwo * x)
print "Answer: %s with a remainder of %s" % (x, r)

Si vous voulez faire cela dans un format de calculatrice, remplacez simplement valone = 8 par valone = int(input("Value One")). Faites de même avec valtwo = 3, mais des vairables différents évidemment.


vous devez effectuer un cast valone/valtwoen int. sinon, il en résultera un nombre flottant.
Ali Yılmaz

-1

vous pouvez définir une fonction et l'appeler reste avec 2 valeurs comme rem (number1, number2) qui retourne number1% number2 puis créer un while et le définir sur true puis imprimer deux entrées pour votre fonction en tenant les numéros 1 et 2 puis print (rem (nombre1, nombre2)


1
Veuillez ajouter un exemple fonctionnel. Expliquer un code théorique peut être difficile à comprendre.
mischva11
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.