¿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
aparentemente es igual a 0. ¿Cómo?
El operador% (módulo) produce el resto 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 cero a la derecha genera la excepción ZeroDivisionError. Los argumentos pueden ser números de coma 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 0
porque no hay resto si 6 se divide por 2 (3 veces).
Ejemplo 2 : 7%2
evalúa 1
porque hay un resto de 1
cuando 7 se divide por 2 (3 veces).
Para resumir eso, devuelve el resto de una operación de división, o 0
si no hay resto. Entonces 6%2
significa encontrar el resto de 6 dividido por 2.
- 21 % 4
es 3 en Python.-11%5 = 4
?Algo fuera de tema,
%
también se usa en operaciones de formateo de cadenas como%=
para sustituir valores en una cadena:Una vez más, fuera del tema, pero parece ser una característica poco documentada que me llevó un tiempo rastrear, y pensé que estaba relacionada con el cálculo del módulo de Pythons para el que esta página SO ocupa un lugar destacado.
fuente
%=
no aparece en esa página%
operador porque refleja los especificadores de porcentaje utilizados dentro de la propia cadena.Una expresión como
x % y
evalúa el resto dex ÷ y
- bueno, técnicamente es "módulo" en lugar de "recordatorio", por lo que los resultados pueden ser diferentes si se compara con otros idiomas donde%
está el operador restante. Hay algunas diferencias sutiles (si está interesado en las consecuencias prácticas, consulte también "Por qué los pisos de división entera de Python" a continuación).La precedencia es lo mismo que los operadores
/
(división) y*
(multiplicación).Python gotcha : dependiendo de la versión de Python que esté utilizando,
%
también es el operador de interpolación de cadenas (en desuso), así que tenga cuidado si viene de un lenguaje con conversión automática de tipos (como PHP o JS) donde una expresión como'12' % 2 + 3
legal es: en Python resultará en loTypeError: not all arguments converted during string formatting
que probablemente será bastante confuso para usted.[actualización para Python 3]
Comentarios del usuario n00p:
Para ser precisos, la división de enteros solía ser el valor predeterminado en Python 2 (ten en cuenta que esta respuesta es mayor que mi hijo que ya estaba en la escuela y en ese momento 2.x era mainstream):
En los
9 / 2
resultados modernos de Python4.5
:[actualizar]
El usuario dahiya_boy preguntó en la sesión de comentarios:
Esto es raro, ¿verdad? Si intentas esto en JavaScript:
Esto se debe a que en JavaScript
%
es el operador "restante", mientras que en Python es el operador "módulo" (matemática del reloj).Puede obtener la explicación directamente de GvR :
En Java e iOS,
-11 % 5 = -1
mientras que en Python y Ruby-11 % 5 = 4
.Bueno, la mitad de la razón es explicada por Paulo Scardine , y el resto de la explicación está debajo aquí.
En Java e iOS,
%
da el resto, lo que significa que si divide 11% 5 daQuotient = 2 and remainder = 1
y -11% 5 daQuotient = -2 and remainder = -1
.Código de muestra en iOS rápido.
Pero cuando hablamos de Python, da un módulo de reloj. Y su trabajo con la siguiente fórmula
mod(a,n) = a - {n * Floor(a/n)}
Eso significa,
mod(11,5) = 11 - {5 * Floor(11/5)} => 11 - {5 * 2}
Entonces,
mod(11,5) = 1
Y
mod(-11,5) = -11 - 5 * Floor(11/5) => -11 - {5 * (-3)}
Entonces,
mod(-11,5) = 4
Código de muestra en python 3.0.
fuente
help(divmod)
documenta la invarianteq, r = divmod(x y) <==> q*y + r == x
.El módulo es una operación matemática, a veces descrita como "aritmética de reloj". Me parece que describirlo como un simple residuo es engañoso y confuso porque oculta la verdadera razón por la que se usa tanto en informática. Realmente se utiliza para envolver los ciclos.
Piense en un reloj: suponga que mira un reloj en tiempo "militar", donde el rango de horas va de 0:00 a 23.59. Ahora, si desea que algo suceda todos los días a medianoche, desearía que la hora actual mod 24 sea cero:
if (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 resto, es una forma matemática lidiar con los ciclos y es muy importante en informática. También se usa para envolver las matrices, lo que le permite aumentar el índice y usar el módulo para volver al principio después de llegar al final de la matriz.
fuente
a % b = a - b * floor(a/b)
Python - Operadores básicos
http://www.tutorialspoint.com/python/python_basic_operators.htm
a = 10 yb = 20
b% a = 0
fuente
En la mayoría de los idiomas,% se utiliza para el módulo . Python no es la excepción.
fuente
El operador% Modulo también se puede utilizar para imprimir cadenas (al igual que en C) como se define en Google https://developers.google.com/edu/python/strings .
Esto parece desviarse del tema, pero ciertamente ayudará a alguien.
fuente
x % y
calcula el resto de la divisiónx
dividida pory
donde el cociente es un número entero . El resto tiene el signo dey
.En Python 3 el cálculo rinde
6.75
; Esto se debe a que/
hace una división verdadera, no una división entera como (por defecto) en Python 2. En Python 21 / 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, por lo tanto, para obtener el 7 como resultado, puede ejecutar:Además, puede obtener la división de estilo Python en Python 2, simplemente agregando la línea
como la primera línea de código fuente en cada archivo fuente.
fuente
#
es para comentarios y//
es un operador.Operador de módulo, se usa para la división de resto en enteros, típicamente, pero en Python se puede usar para números de coma flotante.
http://docs.python.org/reference/expressions.html
fuente
Es una operación de módulo, excepto cuando se trata de un operador de formato de cadena estilo C antiguo, no una operación de módulo . Ver aquí para más detalles. Verá mucho de esto en el código existente.
fuente
Además, hay una útil función incorporada llamada
divmod
:fuente
Sé consciente de
incluso con los corchetes resulta en 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): intente ...
Esto es un poco fuera de tema aquí, pero debe tenerse en cuenta al evaluar la expresión anterior :)
fuente
(1)+(0)-(0.25)+(6)
.Fue difícil para mí encontrar fácilmente casos de uso específicos para el uso de% en línea, por ejemplo, ¿por qué la división de módulo fraccional o la división de módulo negativa dan como resultado la respuesta que hace? Espero que esto ayude a aclarar preguntas como esta:
División de módulos en general:
La división de módulo devuelve el resto de una operación de división matemática. Se 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 (equivalente a x):
El primer paso en el cálculo del módulo es realizar una división entera:
x_int = 5 // 2 (la división de enteros en python usa doble barra)
x_int = 2
A continuación, la salida de x_int se multiplica por el divisor:
x_mult = x_int * divisor x_mult = 4
Por último, el dividendo se resta de x_mult
dividendo - x_mult = 1
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
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 es mayor que el dividendo:
La división entera da como resultado 0 mientras que; por lo tanto, cuando se realiza el paso 3 anterior, el valor del dividendo se transfiere (se resta de cero):
Aplicación para aplicar el módulo a un negativo
La división de piso ocurre en la cual el valor de la división entera se redondea al valor entero más bajo:
Por lo tanto, cuando haces una división entera, ¡puedes obtener un resultado diferente al esperado!
La aplicación de los pasos anteriores en el siguiente dividendo y divisor ilustra el concepto de módulo:
Paso 1: aplicar división entera
Paso 2: Multiplica el resultado de la división entera por el divisor
Paso 3: reste el dividendo de la variable multiplicada, observe el doble negativo.
Por lo tanto:
fuente
El operador% (módulo) produce el resto de la división del primer argumento por el segundo. Los argumentos numéricos se convierten primero a un tipo común.
Esto se basa en la precedencia del operador.
fuente
%
es modulo .3 % 2 = 1
,4 % 2 = 0
/
es (un entero en este caso) división, entonces:fuente
Es una operación de módulo http://en.wikipedia.org/wiki/Modulo_operation
http://docs.python.org/reference/expressions.html
Entonces, con el orden de operaciones, eso funciona para
(3 + 2 + 1-5) + (4% 2) - (1/4) + 6
(1) + (0) - (0) + 6
7 7
El 1/4 = 0 porque estamos haciendo matemática entera aquí.
fuente
Es, como en muchos lenguajes tipo C, el resto o la operación del módulo. Consulte la documentación para los tipos numéricos: int, float, long, complex .
fuente
Módulo: divide el operando de la izquierda por el operando de la derecha y devuelve el resto.
Si ayuda:
... y así.
fuente
He descubierto que la forma más fácil de comprender el operador del módulo (%) es a través de una división larga. Es el resto y puede ser útil para determinar que un número sea par o impar:
fuente