Como funciona o % em Python?

O que faz o {[[0]} num cálculo? Não consigo perceber o que faz.

Por exemplo: 3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6 é aparentemente igual a 7. Como?

Author: User that is not a user, 2010-12-13

18 answers

O operador % (módulo) rende o restante da divisão do primeiro argumento pelo segundo. Os argumentos numéricos são primeiro convertidos para um tipo comum. Um argumento de direita zero levanta a excepção de erro ZeroDivisionError. Os argumentos podem ser números de vírgula flutuante, por exemplo, 3.14%0.7 é igual a 0.34 (uma vez que 3.14 é igual a 4*0.7 + 0.34.) O operador modulo sempre produz um resultado com o mesmo sinal que seu segundo operando (ou zero); o valor absoluto do resultado é estritamente menor do que o valor absoluto do segundo operando [2].

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

Exemplo 1: 6%2 avalia em 0 porque não há nenhum restante se 6 for dividido por 2 (3 vezes ).

Exemplo 2: 7%2 avalia 1 porque há um resto de 1 quando 7 é dividido por 2 ( 3 vezes ).

De modo a resumir isso, devolve o resto de uma operação de divisão, ou 0 se não há mais nada. Então {[0] } significa encontrar o resto de 6 dividido por 2.

 205
Author: meder omuraliev, 2010-12-13 18:39:56

Um pouco fora do tópico, o % também é usado em operações de formatação de cadeias de caracteres como %= para substituir valores numa cadeia de caracteres:

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

Novamente, fora do tópico, mas parece ser um pouco documentado recurso que levei algum tempo para rastrear, e eu pensei que estava relacionado com Pitons módulo de cálculo para esta página classifica altamente.

 109
Author: mrmagooey, 2013-02-15 00:58:08

O módulo é uma operação matemática, por vezes descrita como "aritmética de clock"."Eu acho que descrevê-lo como simplesmente um restante é enganador e confuso porque ele esconde a verdadeira razão pela qual ele é usado tanto na ciência da computação. Ele realmente é usado para enrolar em torno de ciclos.

Pense num relógio: suponha que você olhe para um relógio em tempo" militar", onde o intervalo de tempo vai de 0: 00-23: 59. Agora, se você quisesse que algo acontecesse todos os dias à meia-noite, você iria querer o Tempo actual mod 24 a zero:

Se (hora % 24 == 0):

Pode-se pensar em todas as horas da história envolvendo um círculo de 24 horas vezes e mais e a hora atual do dia é o número infinitamente longo mod 24. É um conceito muito mais profundo do que apenas um resto, é uma forma matemática de lidar com ciclos e é muito importante na ciência da computação. Ele também é usado para enrolar em torno de arrays, permitindo que você aumente o índice e use o módulo para enrolar de volta para o começo depois que você chegar ao fim da matriz.
 36
Author: jarvis01123, 2018-01-19 19:41:05

Uma expressão como 'x % y' avalia o resto de 'x / y'. As regras de precedência são como " / "e"*".

>>> 9 / 2
4
>>> 9 % 2
1
  • 9 dividido por 2 é igual a 4.
  • 4 vezes 2 é 8
  • 9 menos 8 é 1 - o restante.

Python gotcha: dependendo da versão em Python que está a usar, % também é o operador de interpolação de texto (obsoleto), por isso tenha cuidado se vem de uma língua com um tipo de casting automático (como o PHP ou o JS) onde uma expressão como '12' % 2 + 3 é legal: em Python irá resultar em TypeError: not all arguments converted during string formatting o que provavelmente será bastante confuso para si.

[actualizar para o Python 3]

Observações do utilizador n00p:

9/2 é 4.5 em python. Você tem que fazer a divisão inteira assim: 9//2 Se quiser que o python lhe diga quantos objetos inteiros restam após a Divisão(4).

Para ser preciso, a divisão inteira era o padrão no Python 2:

$ 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

Em Python 3 agora 9 / 2 os resultados 4.5 realmente, mas tenha em mente que a resposta original é muito antiga.

$ 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
 33
Author: Paulo Scardine, 2018-08-25 04:05:52

Na maioria das línguas, % é usado para Módulo. O Python não é excepção.

 9
Author: Sorpigal, 2010-12-13 18:34:29

Python - Operadores Básicos
http://www.tutorialspoint.com/python/python_basic_operators.htm

O módulo divide o operando da mão esquerda pelo operando da mão direita e devolve o restante

A = 10 e b = 20

B % a = 0

 9
Author: Halil, 2011-01-14 13:05:24

Além disso, há uma função incorporada útil chamada divmod:

Divmod (a, b)

Tome dois números (não complexos) como argumentos e devolva um par de números constituídos pelo seu quociente e restante ao usar divisão longa.

 4
Author: warvariuc, 2010-12-13 20:45:24

x % y calcula o restante da Divisão x dividida por y Onde o quociente é um inteiro . O restante tem o sinal de y.


No Python 3, as taxas de cálculo 6.75; isto acontece porque o / faz uma divisão verdadeira, Não uma divisão inteira como (por omissão) no Python 2. No Python 2 1 / 4 dá 0, como o resultado é arredondado para baixo.

A divisão inteira pode ser feita também no Python 3, com o operador //, de modo a obter o 7 como um resultado, você pode executar:

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

Além disso, você pode obter a divisão de estilo Python no Python 2, adicionando apenas a linha

from __future__ import division

Como a primeira linha de código fonte em cada ficheiro de código.

 4
Author: Antti Haapala, 2018-02-08 08:26:00

Operador de módulo, é usado para a divisão restante em inteiros, normalmente, mas em Python pode ser usado para números de ponto flutuante.

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

O operador % (módulo) rende o restante da divisão do primeiro argumento pelo segundo. Os argumentos numéricos são primeiro convertidos para um tipo comum. Um argumento de direita zero levanta a excepção de erro ZeroDivisionError. Os argumentos podem ser números de vírgula flutuante, por exemplo, 3, 14% 0, 7 é igual a 0, 34 (dado que 3, 14 é igual a 4*0.7 + 0.34.) The modulo operator always yields a result with the same signe as its second operand (or zero); the absolute value of the result is strictly smaller than the absolute value of the second operand [2].

 3
Author: wkl, 2010-12-13 18:33:36

É uma operação modulo, excepto quando é um antigo operador de formatação de cordas estilo C, Não uma operação modulo . Veja aqui para mais detalhes. Você verá muito disso em código existente.

 3
Author: John Machin, 2010-12-13 18:47:40

Esteja ciente de que

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

Mesmo com os parêntesis resulta em 6.75 em vez de 7 se calculado em Python 3.4.


E o operador ' / ' não é assim tão fácil de entender, também (python2. 7): tente...

- 1/4

1 - 1/4

Este é um pouco fora do tópico aqui, mas deve ser considerado ao avaliar a expressão acima:)

 2
Author: bernhard, 2015-02-16 16:06:37

O operador% módulo também pode ser usado para imprimir cadeias de caracteres (tal como em C), tal como definido no 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')
Isto parece estar fora de questão, mas vai ajudar alguém.
 2
Author: Harshit Chaudhary, 2017-04-21 18:31:57

É, como em muitas línguas semelhantes A C, o restante ou operação modulo. Veja a documentação para tipos numéricos-int, float, long, complex.

 1
Author: Andrew Jaffe, 2011-05-17 12:51:42

O módulo divide o operando da mão esquerda pelo operando da mão direita e devolve o restante.

Se ajudar:

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

... e assim por diante.

 1
Author: gr8scott06, 2016-04-28 22:32:44

O operador % (módulo) rende o restante da divisão do primeiro argumento pelo segundo. Os argumentos numéricos são primeiro convertidos para um tipo comum.

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

Isto baseia-se na precedência do operador.
 0
Author: user225312, 2010-12-13 18:35:25

% riz Modo . 3 % 2 = 1, 4 % 2 = 0

/ is (an integer in this case) division, so:

3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6
1 + 4%2 - 1/4 + 6
1 + 0 - 0 + 6
7
 0
Author: khachik, 2010-12-13 18:36:12
É uma operação modulo. http://en.wikipedia.org/wiki/Modulo_operation

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

Então, com a ordem das operações, Isso resulta em

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

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

7

O 1/4=0 porque estamos a fazer matemática inteira aqui.

 0
Author: Marc Hughes, 2010-12-13 18:37:27
Foi-me difícil encontrar casos de Utilização específicos para a utilização de % em linha ,por exemplo, porque é que a divisão de Módulo fraccional ou a divisão de Módulo negativo resultam na resposta que resulta. Espero que isto ajude a esclarecer questões como esta:

Divisão De Módulo Em Geral:

A divisão Módulo devolve o resto de uma operação de divisão matemática. Faz o seguinte:

Digamos que temos um dividendo de 5 e divisor de 2, o seguinte: a operação de divisão seria (igual a x):
dividend = 5
divisor = 2

x = 5/2 
  1. O primeiro passo no cálculo do módulo é conduzir a divisão inteira:

    X_ int = 5 / / 2 (a divisão inteira em python usa barra dupla)

    X_int = 2

  2. A seguir, a saída do x_int é multiplicada pelo divisor:

    X_mult = x_int * divisor x_mult = 4

  3. Por último, o dividendo é subtraído do x_mult

    Dividendo-x_mult = 1

  4. A operação de Módulo devolve, portanto, 1:

    5 % 2 = 1

Aplicação para aplicar o módulo de elasticidade a uma fracção

Example: 2 % 5 

O cálculo do módulo de elasticidade quando aplicado a uma fracção é o mesmo que acima; no entanto, é importante notar que a divisão inteira resultará num valor de zero quando o divisor for maior que o dividendo:

dividend = 2 
divisor = 5

A divisão inteira resulta em 0 considerando que, por conseguinte,, quando a Etapa 3 é realizada, o valor do dividendo é realizado (subtraído de zero):

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

Aplicação para aplicar o módulo de elasticidade a um negativo

Ocorre uma divisão do piso na qual o valor da divisão inteira é arredondado para o valor inteiro mais baixo:

import math 

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

y = 1.1
math.floor = 1

Portanto, quando você faz divisão inteira você pode ter um resultado diferente do que você espera!

Aplicação das etapas anteriores aos seguintes dividendos e divisores: ilustra o conceito de Módulo:

dividend: -5 
divisor: 2 

Passo 1: Aplicar a divisão inteira

x_int = -5 // 2  = -3

Passo 2: multiplicar o resultado da divisão inteira pelo divisor

x_mult = x_int * 2 = -6

Passo 3: subtrai o dividendo da variável multiplicada, notifica o duplo negativo.

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

Portanto:

-5 % 2 = 1
 0
Author: N.Atanasov, 2017-12-18 02:23:53