Trova il resto della divisione di un numero


155

Come potrei fare per trovare il resto della divisione di un numero in Python?

Ad esempio:
se il numero è 26 e il numero diviso è 7, il resto della divisione è 5.
(poiché 7 + 7 + 7 = 21 e 26-21 = 5).


8
Sembra che l'abbia già fatto :)
Chris Dixon,

Suggerirei di cercare l' operatore modulo
yurib

11
Non vedo dove abbia menzionato nulla dei compiti
p1l0t

Risposte:


205

stai cercando l'operatore modulo:

a % b

per esempio:

26 % 7

Certo, forse volevano che tu lo implementassi da solo, il che non sarebbe neanche troppo difficile.


13
Si noti che l'operatore modulo restituisce sempre un numero positivo, quindi per i numeri negativi che potrebbe non essere quello che ci si aspetta quando si parla del resto: -10 % 3 == 2. Comunque è a/b*b + a%b == aancora vero, dato che python arrotonda sempre verso -Infinito, a differenza di altre lingue, che si arrotondano verso 0 ma restituiscono -1.
marcelj,

6
Questo perché Python %esegue un vero modulo, che restituisce valori sull'intervallo [0, divisor)e si accoppia bene con la divisione floored (verso l'infinito negativo). I linguaggi C usano l' %operatore per le operazioni rimanenti che restituiscono valori nell'intervallo (-divisor, divisor)e si accoppiano bene con la divisione standard (verso zero).
Aaron Franke,

196

Il resto di una divisione può essere scoperto usando l'operatore %:

>>> 26%7
5

Nel caso abbiate bisogno sia del quoziente che del modulo, c'è la divmodfunzione integrata:

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

47

26% 7 (otterrai resto)

26/7 (otterrai un divisore può essere un valore float)

26 // 7 (otterrai solo il valore intero divisore))


18

Se si desidera ottenere il quoziente e il resto in una riga di codice (caso d'uso più generale), utilizzare:

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

17

Se vuoi evitare il modulo, puoi anche usare una combinazione delle quattro operazioni di base :)

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

16

Da Python 3.7, c'è una nuova math.remainder()funzione:

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

Produzione:

-2.0  # not 5

Nota, come sopra, non è lo stesso di %.

Citando la documentazione :

matematica. resto (x, y)

Restituisce il resto in stile IEEE 754 di x rispetto a y. Per x finito e diverso da zero y, questa è la differenza x - n * y, dove n è il numero intero più vicino al valore esatto del quoziente x / y. Se x / y è esattamente a metà strada tra due numeri interi consecutivi, viene utilizzato il numero intero pari più vicino per n. Il resto r = resto (x, y) soddisfa quindi sempre abs (r) <= 0,5 * abs (y).

Casi speciali seguono IEEE 754: in particolare, resto (x, math.inf) è x per qualsiasi x finito, e resto (x, 0) e resto (math.inf, x) aumentano ValueError per qualsiasi non-NaN x. Se il risultato dell'operazione rimanente è zero, quello zero avrà lo stesso segno di x.

Sulle piattaforme che utilizzano IEEE 754 in virgola mobile binaria, il risultato di questa operazione è sempre esattamente rappresentabile: non viene introdotto alcun errore di arrotondamento.

Il numero29962 descrive la logica per la creazione della nuova funzione.


math.remainder potrebbe non funzionare come previsto per python 3.7 >>> math.remainder (-2.99,2) -0.9900000000000002 >>> math.remainder (-3,2) 1.0
Dominic Barraclough

4

Usa% invece di / quando dividi. Questo restituirà il resto per te. Quindi nel tuo caso

26 % 7 = 5

4

Modulo sarebbe la risposta corretta, ma se lo fai manualmente dovrebbe funzionare.

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

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

5
Funziona solo se num è> = 0 e dif> 0.
12431234123412341234123

4

Possiamo risolverlo usando l'operatore modulo (%)

26% 7 = 5;

ma 26/7 = 3 perché fornirà il quoziente ma% operatore darà il resto.


3
Se usi Python 2, 26/7 = 3, per Python 3, il 26/7 è circa 3.7142857142857144
Antti A


0

Se vuoi il resto del tuo problema di divisione, usa le regole del resto, proprio come in matematica. Concesso questo non ti darà un risultato decimale.

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

Se vuoi farlo in un formato calcolatrice, basta sostituirlo valone = 8 con valone = int(input("Value One")). Fai lo stesso con valtwo = 3, ma diversi vendibili ovviamente.


devi lanciare valone/valtwosu int. altrimenti si otterrà un numero float.
Ali Yılmaz,

-1

puoi definire una funzione e chiamarla resto con 2 valori come rem (numero1, numero2) che restituisce numero1% numero2, quindi crea un po 'e impostalo su vero, quindi stampa due ingressi per la tua funzione tenendo i numeri 1 e 2 quindi stampa (rem (numero1, numero2)


1
Aggiungi un esempio funzionante. Spiegare alcuni codici teorici potrebbe essere difficile da capire.
mischva11
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.