使用if语句优雅地使用范围的方法是什么?

8
我有一种非常粗糙的编写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相乘吗? - Ignacio Vazquez-Abrams
2个回答

12
为了更直接地翻译,可以这样说:
for a in range(2, 3000):
    if all(a % k == 0 for k in range(1,11)):
        print a

尽管对于所有整数a都有a % 1 == 0,因此该检查是不必要的。

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

你的倒数第二行缺少冒号。 - BioGeek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接