新手在这里。我一直在尝试寻找数字1到10的最小公倍数。到目前为止,我的代码
def smallest_multiple():
a = 0
while True:
a += 1
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:
return a
print(smallest_multiple())
我的结果是2520,这似乎是正确的。它是可被数字1到10整除的最小数字,无余数。但是,有没有办法通过遍历5条线来使它们更短(而不是那么多模数)?我已经尝试过这样的事情
def smallest_multiple():
a = 0
while True:
a += 1
for i in range(1, 11):
if a % i == 0:
return a
print(smallest_multiple())
但是返回的只是1,而不是2520。有没有办法制作
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:
更短?
答案 0 :(得分:1)
您可以将其更改为
if all([a%i == 0 for i in range(1,11)]):
全部获取一个列表,如果列表中的所有内容均为True,则返回True
这使用简单的列表理解来遍历数字1到10,并使用a%i == 0
检查它们是否全部为真
答案 1 :(得分:1)
您可以使用all:
def smallest_multiple():
factors = [i for i in range(1, 11)]
a = 0
while True:
a += 1
if all([a % factor == 0 for factor in factors]):
return a
print(smallest_multiple())
输出
2520
更新
如@PatrickHaugh所建议,您可以避免创建列表:
def smallest_multiple():
factors = range(1, 11)
a = 0
while True:
a += 1
if all(a % factor == 0 for factor in factors):
return a
print(smallest_multiple())
输出
2520
答案 2 :(得分:0)
谈到一线^^
虽然不是无限循环
import sys
next(i for i in xrange(1, sys.maxsize) if len([j for j in range(1,10) if i % j == 0]) == 9)
#=> 2520
这不是最有效的解决方案。