Pregunta

Lo que hace el % en un cálculo? Me parece que no puede trabajar en lo que hace.

¿Funciona a cabo un porcentaje del cálculo, por ejemplo:? 4 % 2 es aparentemente igual a 0. Como

¿Fue útil?

Solución

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 la derecha cero plantea la excepción ZeroDivisionError. Los argumentos pueden ser números de punto flotante, por ejemplo, 3,14% 0,7 es igual a 0,34 (desde 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].

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

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

Ejemplo 2 :. Evalúa 7%2 a 1 porque hay un resto de 1 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 ningún resto. Así medios 6%2 encontrar el resto de 6 dividido por 2.

Otros consejos

Un poco fuera de tema, el % también se utiliza en las operaciones de cadena como %= a dar formato a los valores de sustitución en una cadena:

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

Una vez más, fuera de tema, pero parece ser una característica poco documentado que me tomó un tiempo para rastrear, y pensé que estaba relacionado con el cálculo de los pitones de módulo para el que esta página SO ocupa un lugar destacado.

Una expresión como x % y evalúa al resto de x ÷ y - Bueno, técnicamente es "módulo" en lugar de "recordatorio" lo que los resultados pueden ser diferentes si se comparan con otros lenguajes donde % es el operador resto. Hay algunas diferencias sutiles (si está interesado en las consecuencias prácticas véase también "¿por qué la división entera de Python Plantas" a continuación).

Precedencia es el mismo que los operadores / (división) y * (multiplicación).

>>> 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, % es también el (obsoleto) operador de interpolación de cadenas, así que ten cuidado si viene de una lengua con la fundición de tipo automático (como PHP o JS), donde una expresión como '12' % 2 + 3 es legal:. en Python que se traducirá en TypeError: not all arguments converted during string formatting que probablemente va a ser muy confuso para usted

[actualización para Python 3]

n00p comentarios del usuario:

9/2 es 4,5 en Python. Que tiene que hacer la división entera de esta manera:. 9 // 2 si desea pitón que le diga cuántos objetos entera queda después de la división (4)

Para ser precisos, la división entera solía ser el valor por defecto en Python 2 (fíjate, esta respuesta es mayor que mi niño que ya está en la escuela y en la 2.x momento eran la corriente principal):

$ 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 modernas resultados 9 / 2 Python 4.5 de hecho:

$ 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

[Actualización]

dahiya_boy usuario pidió en la sesión comentario:

Q ¿Puede usted explicar por qué -11 % 5 = 4 -. Dahiya_boy

Esto es raro, ¿verdad? Si intenta esto en JavaScript:

> -11 % 5
-1

Esto se debe a que en JavaScript % es el operador "resto", mientras que en Python es el operador (reloj de matemáticas) "módulo".

Se puede obtener la explicación directamente de RGv :


Editar - dahiya_boy

En Java y el IOS -11 % 5 = -1 mientras que en Python y -11 % 5 = 4 rubí.

Bueno, la mitad de la razón se explica por el Paulo Scardine , y el resto de la explicación está por debajo de aquí

En Java y el IOS, % da el resto Esto significa que si se dividen 11% 5 da Quotient = 2 and remainder = 1 y -11% 5 da Quotient = -2 and remainder = -1.

código de ejemplo en iOS SWIFT.

 introducir descripción de la imagen aquí

Sin embargo, cuando hablamos de pitón en su da módulo de reloj. Y su trabajo con fórmula a continuación

mod(a,n) = a - {n * Floor(a/n)}

medios eso es,

mod(11,5) = 11 - {5 * Floor(11/5)} => 11 - {5 * 2}

Así, mod(11,5) = 1

y

mod(-11,5) = -11 - 5 * Floor(11/5) => -11 - {5 * (-3)}

Así, mod(-11,5) = 4

código de ejemplo en Python 3.0.

 introducir descripción de la imagen aquí


¿Por qué Python de la división entera Plantas

Me pidieron (de nuevo) de hoy para explicar por qué la división entera en Python devuelve el piso del resultado en lugar de truncar hacia cero como C.

Para números positivos, no es ninguna sorpresa:

>>> 5//2
2

Sin embargo, si uno de los operandoses negativo, el resultado se redondea, es decir, redondeado lejos de cero (hacia el infinito negativo):

>>> -5//2
-3
>>> 5//-2
-3

Esto perturba algunas personas, pero hay una buena razón matemática. La operación de la división entera (//) y su hermano, la operación de módulo (%), van de la mano y satisfacen una relación matemática agradable (todas las variables son números enteros):

a/b = q with remainder r

tal que

b*q + r = a and 0 <= r < b

(suponiendo que a y b son> = 0).

Si desea que la relación de prorrogar por un negativo (manteniendo positiva b), tiene dos opciones: si truncar q hacia cero, r se convertirá en negativo, de modo que los cambios invariantes a 0 <= abs (r) < de lo contrario, puede piso q hacia el infinito negativo, y el invariante sigue siendo 0 <= r

En la teoría de números matemáticos, los matemáticos prefieren siempre la última opción (véase, por ejemplo Wikipedia ). Para Python, he hecho la misma elección, porque hay algunas aplicaciones interesantes de la operación módulo, donde el signo de un no es interesante. Considerar la adopción de una marca de tiempo POSIX (segundos desde el inicio de 1970) y convertirla en la hora del día. Puesto que hay 24 * 3600 = 86.400 segundos en un día, este cálculo es simplemente t% 86400. Pero si tuviéramos que expresar veces antes de 1970 el uso de números negativos, la regla de "truncar a cero" podría dar un resultado sin sentido! Usando la regla baja que todo salga bien.

Otras aplicaciones que he pensado son cálculos de posiciones de píxel en gráficos por ordenador. Estoy seguro de que hay más.

Para b negativo, por cierto, todo lo que acaba voltea, y el invariante se convierte en:

0 >= r > b.

Entonces, ¿por qué C no hacerlo de esta manera? Es probable que el hardware no lo hizo en el momento ha sido proyectado. Y el hardware probablemente no lo hizo de esta manera porque en el hardware más antiguo, los números negativos se representan como "signo + magnitud" en lugar de la representación de complemento a dos usada en estos días (al menos para los números enteros). Mi primer ordenador fue un mainframe de datos de control y se utiliza de un complemento para los enteros, así como flotadores. Un patrón de los 60 significó el cero negativo!

Tim Peters, que sabe dónde están enterrados los esqueletos de punto flotante todo de Python, ha expresado cierta preocupación acerca de mi deseo de extender estas reglas a punto de módulo flotante. Probablemente tiene razón; la regla truncado-hacia-negativo-infinity puede causar la pérdida de precisión para x 1.0% cuando x es un número negativo muy pequeño. Pero eso no es suficiente para mí para romper enteros módulo, y // está estrechamente unida a eso.

PS. Tenga en cuenta que estoy usando // en lugar de / - se trata de Python 3 de sintaxis, y también permitió que en Python 2 enfatizar que usted sabe que está invocando la división entera. El / operador en Python 2 es ambigua, ya que devuelve un resultado diferente para dos operandos enteros que para un int y un flotador o dos flotadores. Pero eso es una historia totalmente independiente; ver PEP 238.

Publicado por Guido van Rossum a las 9:49 AM

El módulo es una operación matemática, a veces descrito como "aritmética del reloj." Me parece que lo describe como un simple resto es engañoso y confuso porque enmascara la verdadera razón por la que se utiliza tanto en la informática. En realidad, se utiliza para envolver alrededor de los ciclos.

Piense en un reloj: Supongamos que nos fijamos en un reloj en el tiempo "militar", donde el rango de tiempos va de 0:00 - 23:59. Ahora bien, si usted quiere que algo suceda todos los días a la medianoche, le gustaría que la hora actual mod 24 a ser cero:

si (horas% 24 == 0):

Se puede pensar en todas las horas en la historia de envolver alrededor de un círculo de 24 horas una y otra y la hora actual del día es que el número infinitamente larga mod 24. Es un concepto mucho más profundo que un simple resto, es una forma matemática para hacer frente a los ciclos y es muy importante en la informática. También se utiliza para envolver alrededor de las matrices, lo que permite aumentar el índice y utiliza el módulo para envolver de nuevo al principio después de llegar a la final de la matriz.

Python - operadores básicos
http://www.tutorialspoint.com/python/python_basic_operators.htm

Módulo - Divide la mano izquierda operando con la mano derecha y vuelve operando resto

a = 10 y b = 20

b% a = 0

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

% operador de módulo puede también ser utilizado para la impresión de cuerdas (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 poco fuera de tema, pero sin duda ayuda a alguien.

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

DIVMOD (a, b)

Tomar dos números (no complejo) como argumentos y devolver un par de números que consiste en su cociente y restante cuando se usa la división larga.

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 Los rendimientos de cálculo 6.75; esto es porque el / hace una verdadera división, no número entero división como (por defecto) en Python 2. En Python 2 1 / 4 da 0, ya que el resultado es abajo redondeado.

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

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

Además, se puede obtener la división de estilo de Python en Python 2, con sólo añadir la línea

from __future__ import division

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

operador de módulo, que se utiliza para la división con resto de números 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 de la derecha cero plantea la excepción ZeroDivisionError. Los argumentos pueden ser números de punto flotante, por ejemplo, 3,14% 0,7 es igual a 0,34 (desde 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 una cadena pasada de moda de estilo C formatear operador, no es una operación de módulo . Ver aquí para más detalles. Usted verá un montón de esto en el código existente.

Tenga en cuenta que

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

incluso con los soportes de los resultados 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): tratar ...

- 1/4

1 - 1/4

Esto es un poco fuera de tema aquí, pero se debe considerar cuando se evalúa la expresión anterior:)

Es, como en muchos como C-idiomas, la operación resto o módulo. Consulte la documentación de para tipos numéricos - int, float, largo, complejo.

Módulo - Divide la mano izquierda operando con la mano derecha y vuelve operando resto

.

Si se ayuda a:

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

... y así sucesivamente.

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

Módulo División En general:

división módulo devuelve el resto de la operación de división matemática. Se hace de la siguiente manera:

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

dividend = 5
divisor = 2

x = 5/2 
  1. El primer paso en el cálculo módulo es a la división conducta entero:

    x_int = 5 // 2 (entero división 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 señalar que la división de enteros dará lugar a un valor de cero cuando el divisor es mayor que el dividendo:

dividend = 2 
divisor = 5

Resultados La división de entero en 0 mientras que el; Por lo tanto, cuando se realiza el paso 3 anterior, el valor del dividendo se realiza a través de (restado de cero):

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

aplicación para aplicar el módulo a un negativo

se produce la división de suelo en la que el valor de la división de número entero 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 se hace la división de enteros que puede obtener un resultado diferente de lo esperado!

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

dividend: -5 
divisor: 2 

Paso 1: división Aplicar entero

x_int = -5 // 2  = -3

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

x_mult = x_int * 2 = -6

Paso 3: Restar el dividendo de la variable multiplicada, observe el doble negativo.

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

Por lo tanto:

-5 % 2 = 1

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 de operadores.

% es href="http://en.wikipedia.org/wiki/Modulo_operation" rel="nofollow"> módulo . 3 % 2 = 1, 4 % 2 = 0

/ es (un entero en este caso) la división, por lo que:

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 fin de las operaciones, que se resuelve a

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

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

7

1/4 = 0, ya que estamos haciendo matemáticas número entero aquí.

he encontrado que la forma más fácil de agarrar el operador módulo (%) es a través de la división larga. Es el resto y puede ser útil en la determinación de un número a ser par o impar:

4%2 = 0

  2
2|4
 -4
  0


11%3 = 2

  3
3|11
 -9
  2

Por lo general, si se divide dos números, devolverá el resto de ella:

Tome este ejemplo:?? ===> 10% 3 = ..... sí, es 1, ¿Por qué

10/3 = 3 ===> 3 * 3 = 9 ==> 10 - 9 = 1

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top