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.)

Bob
la source
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.

Uku Loskit
la source
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)
tzot
la source
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))

Karush Mahajan
la source
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)
Alok Nayak
la source
17

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

26 - (26 // 7 * 7) = 5
alys
la source
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.

Chris_Rands
la source
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

Utilisez le% au lieu du / lorsque vous divisez. Cela vous rendra le reste. Donc dans ton cas

26 % 7 = 5
Bender le plus grand
la source
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
Tonnelier
la source
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.

KATTAMURU ANIL
la source
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

Swarnima Shishodia
la source
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.

S. Ahmad
la source
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)

user13790410
la source
1
Veuillez ajouter un exemple fonctionnel. Expliquer un code théorique peut être difficile à comprendre.
mischva11