¿Cuál es el resultado de % en Python?
¿Qué hace el %
en un cálculo? Parece que no puedo averiguar lo que hace.
¿Se trata de un porcentaje del cálculo, por ejemplo: "4 % 2" es aparentemente igual a 0. ¿Cómo?
229
3
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 cero a la derecha 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 modulo 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
se evalúa como0
porque no hay resto si se divide 6 entre 2 ( 3 veces ).Ejemplo 2:
7%2
se evalúa como1
porque hay un resto de1
cuando 7 se divide por 2 ( 3 veces ).Así que para resumir, devuelve el resto de una operación de división, o
0
si no hay resto. Así que6%2
significa encontrar el resto de 6 dividido por 2.Una expresión como
x % y
evalúa al 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 lenguajes donde%
es el operador de resto. Hay algunas diferencias sutiles (si está interesado en las consecuencias prácticas vea también "Por qué Python's Integer Division Floors" abajo). La precedencia es la misma que la de los operadores/
(división) y*
(multiplicación).%
es también el operador de interpolación de cadenas (obsoleto), así que ten cuidado si vienes de un lenguaje con conversión automática de tipos (como PHP o JS) donde una expresión como'12' % 2 + 3
es legal: en Python resultará enTypeError: not all arguments converted during string formatting
lo que probablemente te confundirá bastante. [actualización para Python 3] Comentarios del usuario n00p: 9/2 es 4.5 en python. Tienes que hacer la división de enteros así: 9//2 si quieres que python te diga cuántos objetos enteros quedan después de la división(4). Para ser precisos, la división entera solía ser la predeterminada en Python 2 (ojo, esta respuesta es más antigua que mi hijo que ya está en el colegio y en la época 2.x eran la corriente principal):En el Python moderno
9 / 2
da como resultado4,5
efectivamente:[actualización] El usuario dahiya_boy preguntó en la sesión de comentarios: Q. ¿Puedes explicar por qué
-11 % 5 = 4
- dahiya_boy Esto es raro, ¿verdad? Si intentas esto en JavaScript:Esto se debe a que en JavaScript
%
es el operador "resto" mientras que en Python es el operador "módulo" (reloj matemático).Puedes obtener la explicación directamente de GvR:
Pero si uno de los operandos es negativo, el resultado se reduce, es decir, se redondea a partir de cero (hacia el infinito negativo):
Esto molesta a algunas personas, pero hay una buena razón matemática. La operación de división de enteros (//) y su hermana, la operación de módulo (%), van juntas y satisfacen una bonita relación matemática (todas las variables son enteras):
tal que
0 >= r > b.
Operador de módulo, se utiliza para la división del resto en los enteros, por lo general, pero en Python se puede utilizar para los números de punto flotante.
http://docs.python.org/reference/expressions.html 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 cero a la derecha 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 modulo 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].