2011-06-06 10 views
8

Tengo esta manera muy cruda de escribir esta declaración IF.manera elegante de usar un rango usando una instrucción if?

for a in range (2,3000): 
    if (a % 1) == 0 and (a % 2) == 0 and (a % 3) == 0 and (a % 4) == 0 and (a % 5) == 0 and (a % 6) == 0 and (a % 7) == 0 and (a % 8) == 0 and (a % 9) == 0 and (a % 10) == 0 : 
    print a 

Supongo que hay una forma mucho mejor de escribir esto, utilizando por ejemplo una función de rango combinada con la instrucción IF.

+2

¿Ha intentado multiplicar 8, 9, 5 y 7? –

Respuesta

12

Para una traducción más o menos directa, ¿qué hay de

for a in range(2, 3000): 
    if all(a % k == 0 for k in range(1,11)): 
     print a 

aunque por supuesto un 1% == 0 para todos los enteros A, por lo que el registro no es necesario.

+0

nice, thanks :) –

7

Lo que necesita son los múltiplos de LCM (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) que caen dentro de su rango. Hay múltiples formas de calcular el LCM (consulte. http://en.wikipedia.org/wiki/Least_common_multiple)

Dado que LCM (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) = 2^3 * 3^2 * 5 * 7 = 2520, puede hacer algo como

lcm = 2520 
i = 2/lcm 
j = 3000/lcm 
for k in range(i, j) 
    print (k + 1) * lcm 
+0

Tienes un colon faltante en tu penúltima línea. – BioGeek

Cuestiones relacionadas