2009-06-07 53 views
37

En el tutorial no es un ejemplo para la búsqueda de números primos.¿Qué significa el signo de porcentaje en Python 3.1

>>> for n in range(2, 10): 
...  for x in range(2, n): 
...   if n % x == 0: 
...    print(n, 'equals', x, '*', n//x) 
...    break 
...  else: 
...   # loop fell through without finding a factor 
...   print(n, 'is a prime number') 
... 

entiendo que la doble == es una prueba para la igualdad, pero no entiendo la parte "si n% x". Como puedo recorrer verbalmente cada parte y decir lo que hace la afirmación para el ejemplo. Pero no entiendo cómo cae el signo de porcentaje. ¿Qué dice "si n% x" en realidad?

Respuesta

44

operador de módulo; da el resto del valor izquierdo dividido por el valor correcto. Como:

3 % 1 sería igual a cero (desde 3 divide uniformemente por 1)

3 % 2 sería igual a 1 (ya que dividiendo 3 por 2 resultados en un resto de 1).

+0

FYI, se llama división euclidiana –

1

En python 2.6 el operador '%' realizó un módulo. No creo que lo hayan cambiado en 3.0.1

El operador de módulo le dice el resto de una división de dos números.

1

Comprueba si el módulo de la división. Por ejemplo, en el caso de que se itera sobre todos los números del 2 al N y mirando si n es divisible por cualquiera de los números en el medio. En pocas palabras, está comprobando si un número dado n es primo. (Sugerencia: puede verificar hasta n/2).

88

El% hace dos cosas, dependiendo de sus argumentos. En este caso, actúa como el operador de módulo, es decir, cuando sus argumentos son números, se divide la primera por la segunda y devuelve el resto . 34 % 10 == 4 ya que 34 dividido por 10 es tres, con un resto de cuatro.

Si el primer argumento es una cadena, lo formatea utilizando el segundo argumento. Esto es un poco involucrado, por lo que se referirá a la documentation, pero sólo como un ejemplo:

>>> "foo %d bar"%5 
'foo 5 bar' 

Sin embargo, el comportamiento de formatear cadena se completará en función de Python 3.1 a favor de la cadena.format() mecanismo:

Las operaciones de formateo descritas aquí exhiben una variedad de peculiaridades que conducen a una serie de errores comunes (como la falla al visualizar tuplas y diccionarios correctamente). Utilizando la nueva interfaz de str.format() ayuda a evitar estos errores, y también proporciona un enfoque general más potente, flexible y extensible para dar formato al texto.

Y afortunadamente, casi todas las nuevas características también están disponibles desde python 2.6 en adelante.

+1

creo que el operador de la cadena de formato se retiró en Python 3. –

+2

@ David: sólo está desfasada. – SilentGhost

+0

Yo también pensé eso, pero no pude encontrarlo cuando miré a mi alrededor. Una segunda mirada lo mostró. Editar explica. – SingleNegationElimination

1

El operador de módulo. El resto cuando divide dos números.

Por ejemplo:

>>> 5 % 2 = 1 # remainder of 5 divided by 2 is 1 
>>> 7 % 3 = 1 # remainer of 7 divided by 3 is 1 
>>> 3 % 1 = 0 # because 1 divides evenly into 3 
Cuestiones relacionadas