¿Cómo funciona % en Python?
¿Qué hace el %
en un cálculo? Parece que no puedo entender lo que hace.
Se resuelve un porcentaje del cálculo por ejemplo: 3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6
es aparentemente igual a 7. ¿Cómo?
18 answers
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 zero right genera la excepción ZeroDivisionError. Los argumentos pueden ser números en 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 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
evalúa a 0
porque no hay resto si 6 se divide por 2 ( 3 veces ).
Ejemplo 2: 7%2
evalúa a 1
porque hay un resto de 1
7 cuando se divide por 2 ( 3 veces ).
Para resumir, devuelve el resto de una operación de división, o 0
si no hay resto. Así que 6%2
significa encontrar el resto de 6 dividido por 2.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-13 18:39:56
Algo fuera de 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 relacionada con el cálculo del módulo de Pitones para el cual esta página ocupa un lugar destacado.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-15 00:58:08
El módulo es una operación matemática, a veces descrita como "aritmética de reloj"."Encuentro que describirlo como simplemente un resto es engañoso y confuso porque enmascara la verdadera razón por la que se usa tanto en ciencias de la computación. Realmente se utiliza para envolver alrededor de los ciclos.
Piense en un reloj: Supongamos que mira un reloj en tiempo "militar", donde el rango de tiempos va de 0:00 a 23.59. Ahora, si quisieras que algo pasara todos los días a medianoche, querrías que la corriente tiempo mod 24 para ser cero:
If (hora % 24 == 0):
Puedes pensar en todas las horas de la historia envolviendo alrededor de 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 de lidiar con los ciclos y es muy importante en ciencias de la computación. También se utiliza para envolver alrededor de matrices, lo que le permite aumentar el índice y utilizar el módulo para envolver de nuevo a la comenzando después de llegar al final de la matriz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-19 19:41:05
Una expresión como 'x % y' se evalúa como el resto de 'x / y'. Las reglas de precedencia son como ' / 'y'*'.
>>> 9 / 2
4
>>> 9 % 2
1
- 9 dividido por 2 es igual a 4.
- 4 veces 2 es 8
- 9 menos 8 es 1 - el resto.
Python gotcha : dependiendo de la versión de Python que esté utilizando, %
también es el operador de interpolación de cadenas (obsoleto), así que tenga cuidado si viene de un lenguaje con casting de tipo automático (como PHP o JS) donde un expresión como '12' % 2 + 3
es legal: en Python dará lugar a TypeError: not all arguments converted during string formatting
que probablemente será bastante confuso para usted.
[actualización para Python 3]
Usuario n00p comentarios:
9/2 es 4.5 en python. Tienes que hacer la división entera 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:
$ 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
de hecho, pero tenga 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-25 04:05:52
En la mayoría de los idiomas % se utiliza para módulo. Python no es una excepción.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-13 18:34:29
Python - Operadores Básicos
http://www.tutorialspoint.com/python/python_basic_operators.htm
Modulus-Divide el operando de la mano izquierda por el operando de la mano derecha y devuelve el resto
A = 10 y b = 20
B % a = 0
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-14 13:05:24
También, hay una útil función incorporada llamada divmod
:
Divmod(a, b)
Tome dos números (no complejos) como argumentos y devuelva un par de números consisting of their quotient and resto cuando se usa división larga.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-13 20:45:24
x % y
calcula el resto de la división x
dividido por y
donde el cociente es un número entero. El resto tiene el signo de y
.
En Python 3 el cálculo produce 6.75
; esto se debe a que el /
hace una división verdadera, no una división entera como (por defecto) en Python 2. En Python 2 1 / 4
da 0, ya que el resultado se redondea hacia abajo.
La división entera se puede hacer en Python 3 también, con el operador //
, por lo tanto para obtener el 7 como resultado, puedes 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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-08 08:26:00
Operador de módulo, se usa para la división de remanentes en enteros, típicamente, pero en Python se puede usar para números de coma 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 zero right genera la excepción ZeroDivisionError. Los argumentos pueden ser números en 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 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].
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-13 18:33:36
Es una operación modulo, excepto cuando es un antiguo operador de formato de cadena de estilo C, no una operación modulo . Ver aquí para más detalles. Verás mucho de esto en el código existente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-13 18:47:40
Tenga en cuenta que
(3+2+1-5) + (4%2) - (1/4) + 6
Incluso con los corchetes resulta en 6.75 en lugar de 7 si se calcula en Python 3.4.
Y el operador '/' no es tan fácil de entender, también (python2.7): try...
- 1/4
1 - 1/4
Esto es un poco fuera de tema aquí, pero debe considerarse al evaluar la expresión anterior:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-16 16:06:37
% Modulo operator también se puede usar para imprimir cadenas (al igual que 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 un poco fuera de tema, pero sin duda ayudará a alguien.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-21 18:31:57
Es, como en muchos lenguajes similares a C, la operación resto o módulo. Consulte la documentación para los tipos numéricos: int, float, long, complex.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-17 12:51:42
Modulus - Divide el operando de la mano izquierda por el operando de la mano derecha y devuelve el resto.
Si ayuda:
1:0> 2%6
=> 2
2:0> 8%6
=> 2
3:0> 2%6 == 8%6
=> true
... y así sucesivamente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-28 22:32:44
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.
3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6 = 7
Esto se basa en la precedencia del operador.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-13 18:35:25
%
is modulo . 3 % 2 = 1
, 4 % 2 = 0
/
es (un entero en este caso) división, así que:
3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6
1 + 4%2 - 1/4 + 6
1 + 0 - 0 + 6
7
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-13 18:36:12
Es una operación modulo http://en.wikipedia.org/wiki/Modulo_operation
Http://docs.python.org/reference/expressions.html
Así que con el orden de las operaciones, que funciona a
(3+2+1-5) + (4%2) - (1/4) + 6
(1) + (0) - (0) + 6
7
El 1/4=0 porque estamos haciendo matemáticas enteros aquí.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-13 18:37:27
Fue difícil para mí encontrar fácilmente casos de uso específicos para el uso de % online ,por ejemplo, por qué hacer división de módulo fraccional o división de módulo negativo resulta en la respuesta que lo hace. Espero que esto ayude a aclarar preguntas como esta:
División De Módulos En General:
Modulus division devuelve el resto de una operación de división matemática. Es lo hace de la siguiente manera:
Digamos que tenemos un dividendo de 5 y divisor de 2, la siguiente división la operación sería (igual a x):
dividend = 5
divisor = 2
x = 5/2
-
El primer paso en el cálculo del módulo es realizar la división entera:
X_int = 5 / / 2 (la división entera 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 del 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
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 es mayor que el dividendo:
dividend = 2
divisor = 5
La división entera resulta en 0 mientras que; por lo tanto, cuando se realiza el paso 3 anterior, el valor del dividendo se lleva a cabo (restado de cero):
dividend - 0 = 2 —> 2 % 5 = 2
Aplicación para aplicar el módulo a un negativo
La división de piso ocurre en la que el valor de la división entera se redondea hacia abajo 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 usted hace la división entera puede obtener un resultado diferente de lo que espera!
Aplicando los pasos anteriores al 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: Multiplique el resultado de la división entera por el divisor
x_mult = x_int * 2 = -6
Paso 3: Reste el dividendo de la variable multiplicada, observe la doble negativa.
dividend - x_mult = -5 -(-6) = 1
Por lo tanto:
-5 % 2 = 1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-18 02:23:53