2011-06-06 196 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