2011-06-06 198 views
8

我有写这个IF语句的非常粗糙的方式。使用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 

我认为有一个更好的方法来写这个,例如使用范围函数结合IF语句?

+2

你试过乘以8,9,5和7? – 2011-06-06 06:54:34

回答

12

对于更多或更少的直接翻译,怎么样

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

虽然过程%1 == 0所有整数a,使检查是不必要的。

+0

不错,谢谢:) – 2011-06-06 06:54:03

7

您需要的是LCM(1,2,3,4,5,6,7,8,9,10)的倍数,它们落在您的范围内。有多种计算LCM的方法(参见http://en.wikipedia.org/wiki/Least_common_multiple

由于LCM(1,2,3,4,5,6,7,8,9,10)= 2^3 * 3^2 * 5 * 7 = 2520,你可以做一些像

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

你的倒数第二行有一个遗漏的冒号。 – BioGeek 2012-01-15 22:47:02