¿Cuál es el resultado de% en Python?

¿Qué significa el % en un cálculo? Parece que no puedo entender lo que hace.

¿Calcula un porcentaje del cálculo, por ejemplo: 4 % 2 es aparentemente igual a 0. ¿Cómo?

El operador% (módulo) produce el rest de la división del primer argumento por el segundo. Los argumentos numéricos se convierten primero a un tipo común. Un argumento de derecho cero genera la excepción ZeroDivisionError. Los argumentos pueden ser números de punto flotante, por ejemplo, 3.14% 0.7 es igual a 0.34 (ya que 3.14 es igual a 4 * 0.7 + 0.34.) El operador de módulo siempre produce un resultado con el mismo signo que su segundo operando (o cero); el valor absoluto del resultado es estrictamente menor que el valor absoluto del segundo operando [2].

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

Ejemplo 1: 6%2 evalúa a 0 porque no hay rest si 6 se divide por 2 (3 veces).

Ejemplo 2 : 7%2 evalúa como 1 porque hay un rest de 1 cuando 7 se divide por 2 (3 veces).

Entonces, para resumir eso, devuelve el rest de una operación de división, o 0 si no hay rest. Entonces 6%2 significa encontrar el rest de 6 dividido por 2.

Algo fuera del tema, el % también se usa en operaciones de formato de cadena como %= para sustituir valores en una cadena:

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

Nuevamente, fuera del tema, pero parece ser una característica poco documentada que me llevó un tiempo rastrear, y pensé que estaba relacionado con el cálculo del módulo de Pythons para el cual esta página SO ocupa un lugar destacado.

El módulo es una operación matemática, a veces descrita como “aritmética de reloj”. Encuentro que describirlo como simplemente un rest es engañoso y confuso porque enmascara la verdadera razón por la que se usa tanto en la informática. Realmente se utiliza para envolver alrededor de los ciclos.

Piense en un reloj: suponga que mira un reloj en tiempo “militar”, donde el intervalo de tiempo va de 0:00 a 23,59. Ahora, si quisiera que algo sucediera todos los días a la medianoche, querría que la hora actual mod 24 sea cero:

si (hora% 24 == 0):

Puedes pensar en todas las horas de la historia envolviendo un círculo de 24 horas una y otra vez, y la hora actual del día es ese número infinitamente largo mod 24. Es un concepto mucho más profundo que solo un rest, es una forma matemática Hacer frente a los ciclos y es muy importante en informática. También se usa para envolver alrededor de las matrices, lo que le permite boost el índice y usar el módulo para volver al principio después de llegar al final de la matriz.

Una expresión como x % y evalúa al rest de x ÷ y . La precedencia es lo mismo que los operadores / (división) y * (multiplicación).

 >>> 9 / 2 4 >>> 9 % 2 1 
  • 9 dividido por 2 es igual a 4.
  • 4 por 2 es 8
  • 9 menos 8 es 1 – el rest.

Python gotcha : dependiendo de la versión de Python que estés usando, % también es el operador de interpolación de cadenas (en desuso), así que ten cuidado si vienes de un lenguaje con conversión de tipos automática (como PHP o JS) donde una expresión como '12' % 2 + 3 es legal: en Python resultará en TypeError: not all arguments converted during string formatting que probablemente será bastante confuso para ti.

[actualización para Python 3]

El usuario n00p comenta:

9/2 es 4.5 en python. Tienes que hacer una división de enteros como: 9 // 2 si quieres que python te diga cuántos objetos completos quedan después de la división (4).

Para ser precisos, la división de enteros solía ser la predeterminada en Python 2 (no importa, esta respuesta es más antigua que mi hijo que ya está en la escuela):

 $ 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 

En Python 3 ahora 9 / 2 resultados 4.5 hecho, pero ten en cuenta que la respuesta original es muy antigua.

 $ 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 

Python – Operadores básicos
http://www.tutorialspoint.com/python/python_basic_operators.htm

Módulo: divide el operando de la mano izquierda por el de la derecha y devuelve el rest

a = 10 y b = 20

b% a = 0

En la mayoría de los idiomas,% se usa para el módulo . Python no es una excepción.

El operador% Modulo también se puede usar para imprimir cadenas (como en C) como se define en 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') 

Esto parece estar fuera de tema, pero sin duda ayudará a alguien.

Además, hay una función incorporada útil llamada divmod :

divmod (a, b)

Tome dos números (no complejos) como argumentos y devuelva un par de números que consistan en su cociente y el rest al usar la división larga.

x % y calcula el rest de la división x dividido por y donde el cociente es un número entero . El rest tiene el signo de y .


En Python 3 el cálculo arroja 6.75 ; esto se debe a que / hace una división verdadera, no una división de enteros como (por defecto) en Python 2. En Python 2 1/4 da 0, ya que el resultado se redondea hacia abajo.

La división de enteros también se puede hacer en Python 3, con el operador // , para obtener el 7 como resultado, puede ejecutar:

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

Además, puede obtener la división de estilo Python en Python 2, simplemente agregando la línea

 from __future__ import division 

como la primera línea de código fuente en cada archivo fuente.

Operador de módulo, se usa para la división del rest en enteros, normalmente, pero en Python se puede usar para números de punto flotante.

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

El operador% (módulo) produce el rest de la división del primer argumento por el segundo. Los argumentos numéricos se convierten primero a un tipo común. Un argumento de derecho cero genera la excepción ZeroDivisionError. Los argumentos pueden ser números de punto flotante, por ejemplo, 3.14% 0.7 es igual a 0.34 (ya que 3.14 es igual a 4 * 0.7 + 0.34.) El operador de módulo siempre produce un resultado con el mismo signo que su segundo operando (o cero); el valor absoluto del resultado es estrictamente menor que el valor absoluto del segundo operando [2].

Es una operación de módulo, excepto cuando se trata de un operador de formateo de cadena de estilo C, no una operación de módulo . Vea aquí para más detalles. Verás mucho de esto en el código existente.

Sé consciente de

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

incluso con los corchetes se obtienen 6.75 en lugar de 7 si se calcula en Python 3.4.


Y el operador ‘/’ tampoco es tan fácil de entender (python2.7): intenta …

 - 1/4 1 - 1/4 

Esto es un poco fuera de tema aquí, pero debe tenerse en cuenta al evaluar la expresión anterior 🙂

Es, como en muchos lenguajes similares a C, el rest o la operación de módulo. Consulte la documentación para los tipos numéricos: int, float, long, complex .

Módulo: divide el operando de la mano izquierda por el de la derecha y devuelve el rest.

Si ayuda:

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

… y así.

El operador% (módulo) produce el rest de la división del primer argumento por el segundo. Los argumentos numéricos se convierten primero a un tipo común.

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

Esto se basa en la precedencia del operador.

% es modulo . 3 % 2 = 1 , 4 % 2 = 0

/ es (un entero en este caso) división, entonces:

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

Es una operación de módulo http://en.wikipedia.org/wiki/Modulo_operation

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

Así que con el orden de las operaciones, eso funciona para

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

(1) + (0) – (0) + 6

7

El 1/4 = 0 porque estamos haciendo matemática de enteros aquí.

Fue difícil para mí encontrar fácilmente casos de uso específicos para el uso de% en línea, por ejemplo, ¿por qué hacer la división de módulo fraccional o la división de módulo negativo resulta en la respuesta que hace? Espero que esto ayude a aclarar preguntas como esta:

División de módulo en general:

La división de módulo devuelve el rest de una operación de división matemática. Lo hace de la siguiente manera:

Digamos que tenemos un dividendo de 5 y un divisor de 2, la siguiente operación de división sería (igualada a x):

 dividend = 5 divisor = 2 x = 5/2 
  1. El primer paso en el cálculo del módulo es realizar una división entera:

    x_int = 5 // 2 (la división entera en python usa doble barra)

    x_int = 2

  2. A continuación, la salida de x_int se multiplica por el divisor:

    x_mult = x_int * divisor x_mult = 4

  3. Por último, el dividendo se resta de la x_mult

    dividendo – x_mult = 1

  4. La operación de módulo, por lo tanto, devuelve 1:

    5% 2 = 1

Aplicación para aplicar el módulo a una fracción.

 Example: 2 % 5 

El cálculo del módulo cuando se aplica a una fracción es el mismo que el anterior; sin embargo, es importante tener en cuenta que la división entera dará como resultado un valor de cero cuando el divisor sea mayor que el dividendo:

 dividend = 2 divisor = 5 

La división entera da como resultado 0 mientras que la división; por lo tanto, cuando se realiza el paso 3 anterior, el valor del dividendo se mantiene (se resta de cero):

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

Aplicación para aplicar el módulo a un negativo.

La división de piso se produce en la que el valor de la división de enteros se redondea al valor entero más bajo:

 import math x = -1.1 math.floor(-1.1) = -2 y = 1.1 math.floor = 1 

Por lo tanto, cuando haces una división entera puedes obtener un resultado diferente del que esperas.

La aplicación de los pasos anteriores en el siguiente dividendo y divisor ilustra el concepto de módulo:

 dividend: -5 divisor: 2 

Paso 1: aplicar la división entera

 x_int = -5 // 2 = -3 

Paso 2: Multiplica el resultado de la división entera por el divisor

 x_mult = x_int * 2 = -6 

Paso 3: Resta el dividendo de la variable multiplicada, observa el doble negativo.

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

Por lo tanto:

 -5 % 2 = 1