Domanda

Che cosa significa il % in un calcolo? Io non riesco a capire cosa fa.

Funziona un per cento del calcolo, ad esempio:? 4 % 2 è apparentemente uguale a 0. Come

È stato utile?

Soluzione

  

L'operatore% (modulo) produce il resto della divisione del primo argomento per il secondo. Gli argomenti numerici vengono prima convertiti in un tipo comune. Un argomento è zero viene sollevata l'eccezione ZeroDivisionError. Gli argomenti possono essere galleggiante numeri in virgola, ad esempio, 3,14% 0,7 equivale 0.34 (dal 3.14 uguale 4 * 0.7 + 0.34.) L'operatore modulo produce sempre un risultato con lo stesso segno del secondo operando (o zero); il valore assoluto del risultato è rigorosamente più piccolo del valore assoluto del secondo operando [2].

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

Esempio 1: Esamina 6%2 a 0 perché c'è alcun resto se 6 è diviso per 2 (3 volte).

Esempio 2 :. Esamina 7%2 a 1 perché c'è un resto di 1 quando 7 è diviso per 2 (3 volte)

Quindi, per riassumere questo, restituisce il resto di un'operazione di divisione, o 0 se non v'è alcun resto. Così mezzi 6%2 trovano il resto del 6 divisa per 2.

Altri suggerimenti

Un po 'fuori tema, il % è utilizzato anche nella stringa di formattazione operazioni come %= di valori sostitutivi in ??una stringa:

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

Ancora una volta, fuori tema, ma sembra essere una caratteristica poco documentato che mi ha portato un po 'di rintracciare, e ho pensato che fosse legato al calcolo Pythons modulo per il quale questa pagina in modo ranghi altamente.

Un'espressione come Esamina x % y al resto del x ÷ y - bene, tecnicamente è "modulo" invece di "promemoria" per cui i risultati potrebbero essere diversi se si confrontano con altre lingue in cui % è l'operatore resto. Ci sono alcune sottili differenze (se si è interessati alle conseguenze pratiche si veda anche "divisione intera di Perché Python piani" a soffietto).

precedenza è lo stesso di operatori / (divisione) e * (moltiplicazione).

>>> 9 / 2
4
>>> 9 % 2
1
  • 9 diviso 2 è uguale a 4.
  • 4 volte 2 è 8
  • 9 meno 8 è 1 -. Il resto

Python Gotcha : a seconda della versione di Python che si sta utilizzando, % è anche il (deprecato) operatore di interpolazione di stringhe, quindi attenzione se si proviene da una lingua con il casting di tipo automatico (come PHP o JS), dove un'espressione come '12' % 2 + 3 è legale:. in Python che si tradurrà in TypeError: not all arguments converted during string formatting che probabilmente sarà abbastanza confusione per voi

[aggiornamento per Python 3]

Commenti n00p utente:

  

9/2 è 4,5 in python. Devi fare la divisione intera in questo modo:. 9 // 2 se si desidera python per dirvi quanti oggetti intero è rimasto dopo la divisione (4)

Per essere precisi, la divisione intera usato per essere il default in Python 2 (si badi bene, questa risposta è più vecchio di mio figlio che è già a scuola e al tempo 2.x erano corrente principale):

$ 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

Nelle moderne risultati 9 / 2 Python 4.5 infatti:

$ 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

[update]

dahiya_boy utente ha chiesto nel commento sessione:

  

Q Si può spiegare il motivo per cui -11 % 5 = 4 -. Dahiya_boy

Questo è strano, vero? Se si tenta questo in JavaScript:

> -11 % 5
-1

Questo perché in JavaScript % è l'operatore "resto", mentre in Python è il (orologio matematica) Operatore "modulo".

È possibile ottenere la spiegazione direttamente da GvR :


  

Modifica - dahiya_boy

In Java e iOS -11 % 5 = -1 mentre in Python e Ruby -11 % 5 = 4.

Ben la metà della ragione si spiega con il Paulo Scardine , ed il resto della spiegazione è al di sotto qui

In Java e iOS, % dà il resto che significa che se si dividono 11% 5 Quotient = 2 and remainder = 1 e -11% 5 Quotient = -2 and remainder = -1.

codice di esempio in iOS veloci.

 entrare descrizione dell'immagine qui

Ma quando si parla di pitone nel suo orologio dà modulo. E il suo lavoro con la formula di seguito

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

Quello è mezzo,

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

Quindi, mod(11,5) = 1

E

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

Quindi, mod(-11,5) = 4

codice di esempio in Python 3.0.

 entrare descrizione dell'immagine qui


  

Integer Divisione Pavimenti di Perché Python

     

Mi è stato chiesto (di nuovo) oggi a spiegare perché divisione intera in Python restituisce il piano del risultato, invece di troncare verso lo zero come C.

     

Per i numeri positivi, non è una sorpresa:

>>> 5//2
2
  

Ma se uno degli operandiè negativo, il risultato è pavimentata, cioè, arrotondato per eccesso (verso l'infinito negativo):

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

Questo disturba alcune persone, ma c'è una buona ragione matematica. L'operazione di divisione intera (//) e suo fratello, l'operazione di modulo (%), vanno insieme e soddisfare una bella relazione matematica (tutte le variabili sono interi):

a/b = q with remainder r
  

tali che

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

(assumendo una e b sono> = 0).

     

Se si desidera che il rapporto di prorogare per un valore negativo (mantenendo b positivo), si hanno due scelte: se si troncano q verso lo zero, r diventerà negativo, in modo che le modifiche invarianti a 0 <= abs (r) < altrimenti, è possibile piano q all'infinito negativo, e l'invariante rimane 0 <= r      

In teoria dei numeri matematica, i matematici preferiscono sempre la seconda scelta (si veda ad esempio Wikipedia ). Per Python, ho fatto la stessa scelta perché ci sono alcune applicazioni interessanti della un'operazione di modulo in cui il segno di una non è interessante. Prendere in considerazione un timestamp POSIX (secondi dall'inizio del 1970) e trasformandolo in del momento della giornata. Dal momento che ci sono 24 * 3600 = 86400 secondi in un giorno, questo calcolo è semplicemente t% 86400. Ma se dovessimo esprimere volte prima del 1970 utilizzando i numeri negativi, la regola "Tronca verso lo zero" avrebbe dato un risultato privo di significato! Utilizzando la regola piano funziona tutto bene.

     

Altre applicazioni che ho pensato di calcoli sono delle posizioni di pixel in computer grafica. Sono sicuro che ci sono più.

     

Per b negativo, tra l'altro, tutto gira giusto e invariante diventa:

0 >= r > b.
  

Quindi, perché non c Procedere in questo modo? Probabilmente l'hardware non lo ha fatto nel momento in C è stato progettato. E l'hardware probabilmente non lo ha fatto in questo modo perché in hardware più vecchio, i numeri negativi sono stati rappresentati come "segno + grandezza", piuttosto che la rappresentazione in complemento a due usato in questi giorni (almeno per gli interi). Il mio primo computer è stato un mainframe dati di controllo e ha usato il proprio complemento per gli interi e galleggianti. Un modello di 60 quelli significava lo zero negativo!

     

Tim Peters, chissà dove scheletri in virgola mobile tutto di Python sono sepolti, ha espresso qualche preoccupazione circa la mia volontà di estendere queste regole per virgola mobile modulo. Probabilmente ha ragione; la regola troncato-verso-negativo infinito può causare la perdita di precisione per x% 1,0 quando x è un numero molto piccolo negativo. Ma non è abbastanza per me per rompere intero modulo, e // è strettamente accoppiato a quello.

     

PS. Si noti che sto usando // invece di / - si tratta di Python 3 della sintassi, e anche permesso in Python 2 per sottolineare che si sa che si sta invocando divisione intera. Il / operatore in Python 2 è ambigua, dato che restituisce un risultato diverso per due operandi interi che per un int e un float o due galleggianti. Ma questa è una storia completamente separata; vedi PEP 238.

     

Inviato da Guido van Rossum alle 09:49

Il modulo è un'operazione matematica, a volte descritto come "orologio aritmetica". Trovo che descrivendolo come un semplice resto è fuorviante e confusione perché si maschera il vero motivo è usato così tanto in informatica. E 'davvero è usato per avvolgere intorno cicli.

pensare ad un orologio: Supponiamo che si guardi un orologio in tempo "militare", in cui l'intervallo di ore va da 0:00 - 23.59. Ora, se si voleva qualcosa accada ogni giorno a mezzanotte, si vorrebbe l'ora corrente mod 24 a zero:

if (ora% 24 == 0):

Si può pensare a tutte le ore della storia avvolgimento attorno ad un cerchio di 24 ore più e più volte e l'attuale ora del giorno è che infinitamente lungo numero mod 24. Si tratta di un concetto molto più profondo di un semplice resto, è un modo matematico per affrontare cicli ed è molto importante in informatica. E 'anche usato per avvolgere gli array, consentendo di aumentare l'indice e utilizzare il modulo per avvolgere di nuovo all'inizio, dopo si raggiunge la fine della matrice.

Python - Operatori di base
http://www.tutorialspoint.com/python/python_basic_operators.htm

  

Modulo - Divide la mano sinistra operando a mano destra operando e restituisce resto

a = 10 e b = 20

b% a = 0

Nella maggior parte dei linguaggi% viene utilizzato per modulo . Python non fa eccezione.

% operatore modulo può anche essere utilizzato per stampare le stringhe (come in C), come definito in 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')

Questo sembra po 'fuori tema, ma sarà certamente di aiuto a qualcuno.

Inoltre, v'è un utile funzione incorporata chiamata divmod :

  

divmod (a, b)

     

Prendere due (non complesse) numeri come argomenti e restituire una coppia di numeri   costituito da loro quoziente e   resto, quando si lungo divisione.

x % y calcola il resto della divisione x diviso per y dove il quoziente è un intero . Il resto ha il segno di y.


In Python 3 la resa di calcolo 6.75; questo perché il / fa un vero divisione, non divisione intera simile (di default) su Python 2. Python 2 1 / 4 dà 0, il risultato è giù arrotondato.

La divisione intera può essere fatto su Python 3 anche con operatore //, quindi per ottenere il 7 di conseguenza, è possibile eseguire:

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

Inoltre, è possibile ottenere la divisione stile Python su Python 2, semplicemente aggiungendo la riga

from __future__ import division

come prima riga di codice sorgente in ogni file sorgente.

operatore modulo, è utilizzato per la divisione resto su interi, tipicamente, ma in Python può essere utilizzato per i numeri in virgola mobile.

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

  

L'operatore% (modulo) produce il resto della divisione del primo argomento per il secondo. Gli argomenti numerici vengono prima convertiti in un tipo comune. Un argomento è zero viene sollevata l'eccezione ZeroDivisionError. Gli argomenti possono essere galleggiante numeri in virgola, ad esempio, 3,14% 0,7 equivale 0.34 (dal 3.14 uguale 4 * 0.7 + 0.34.) L'operatore modulo produce sempre un risultato con lo stesso segno del secondo operando (o zero); il valore assoluto del risultato è rigorosamente più piccolo del valore assoluto del secondo operando [2].

E 'un'operazione di modulo, tranne quando si tratta di una stringa vecchio stile C-stile di formattazione operatore, non è un'operazione di modulo . Vedere qui per i dettagli. Vedrete un sacco di questo nel codice esistente.

Si tenga presente che

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

anche con le staffe risultati in 6,75 invece di 7 se calcolato in Python 3.4.


E l'operatore '/' non è così facile da capire, anche (python2.7): prova ...

- 1/4

1 - 1/4

Questo è un po 'off-topic qui, ma deve essere considerato al momento di valutare l'espressione di cui sopra:)

Si tratta, come in molti linguaggi C-like, l'operazione resto o modulo. Vedere la documentazione per i tipi numerici - int, float, lungo, complesso.

Modulo - Divide la mano sinistra operando a mano destra operando e restituisce resto

.

Se aiuta:

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

... e così via.

E 'stato difficile per me trovare facilmente i casi d'uso specifici per l'uso di% on-line, per esempio. Perché facendo frazionale divisione modulo o negativo risultato della divisione modulo nella risposta che lo fa. Spero che questo aiuta a chiarire le questioni in questo modo:

Modulo Divisione In generale:

divisione Modulus restituisce il resto di un'operazione di divisione matematica. Si fa come segue:

che abbiamo un dividendo di 5 e divisore 2, la seguente operazione di divisione sarebbe (equiparata a x):

dividend = 5
divisor = 2

x = 5/2 
  1. Il primo passo nel calcolo modulo è di divisione condotta interi:

    x_int = 5 // 2 (integer divisione in pitone utilizza doppia barra)

    x_int = 2

  2. Successivamente, l'uscita del x_int viene moltiplicato per il divisore:

    x_mult = x_int * divisore x_mult = 4

  3. Infine, il dividendo viene sottratto dal x_mult

    dividendo - x_mult = 1

  4. L'operazione di modulo, quindi, restituisce 1:

    5% 2 = 1

Applicazione di applicare il modulo a una frazione

Example: 2 % 5 

Il calcolo del modulo quando applicata ad una frazione è lo stesso come sopra; Tuttavia, è importante notare che la divisione intera si tradurrà in un valore di zero quando il divisore è maggiore del dividendo:

dividend = 2 
divisor = 5

La divisione intera risultato 0 mentre la; Pertanto, quando viene eseguita al punto 3, il valore del dividendo avviene attraverso (sottratto da zero):

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

Applicazione di applicare il modulo ad un negativo

verifica divisione Pavimento in cui il valore della divisione intera viene arrotondato al numero intero più basso:

import math 

x = -1.1
math.floor(-1.1) = -2 

y = 1.1
math.floor = 1

Di conseguenza, quando si esegue integer divisione si può ottenere un risultato diverso da quello che ci si aspetta!

Applicando i passaggi precedenti sul seguente dividendo e divisore illustra il concetto di modulo:

dividend: -5 
divisor: 2 

Passo 1: Applicare la divisione integer

x_int = -5 // 2  = -3

Fase 2: Moltiplicare il risultato della divisione intera per il divisore

x_mult = x_int * 2 = -6

Passo 3: Sottrarre il dividendo dalla variabile moltiplicato, notare la doppia negazione.

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

Quindi:

-5 % 2 = 1

L'operatore% (modulo) produce il resto della divisione del primo argomento per il secondo. Gli argomenti numerici vengono prima convertiti in un tipo comune.

  

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

Questo è basato sulla priorità degli operatori.

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

/ è (un numero intero in questo caso) divisione, così:

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

E 'un'operazione di modulo http://en.wikipedia.org/wiki/Modulo_operation

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

Quindi, con ordine delle operazioni, che funziona a

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

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

7

Il quarto = 0, perché stiamo facendo il calcolo integer qui.

Ho trovato che il modo più semplice di cogliere l'operatore modulo (%) è attraverso la divisione lunga. È il resto e può essere utile per determinare un numero di essere pari o dispari:

4%2 = 0

  2
2|4
 -4
  0


11%3 = 2

  3
3|11
 -9
  2

In genere, se si divide due numeri, verrà restituito il resto di esso:

Prendete questo esempio:? ===> 10% 3 = ..... sì è 1, Perché

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top