猿问

如何循环模数?

新手在这里。我一直在试图找到数字 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:

更短?


暮色呼如
浏览 161回答 3
3回答

慕工程0101907

你可以把它改成if all([a%i == 0 for i in range(1,11)]):All 接受一个列表,如果列表中的所有内容都为 True,则返回 True这使用一个简单的列表理解来遍历数字 1 到 10,并检查它们是否都为 True a%i == 0

aluckdog

你可以使用所有: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 aprint(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 aprint(smallest_multiple())输出2520

千万里不及你

说到单线^^虽然不是无限循环import sysnext(i for i in xrange(1, sys.maxsize) if len([j for j in range(1,10) if i % j == 0]) == 9)#=> 2520这不是最有效的解决方案。
随时随地看视频慕课网APP

相关分类

Python
我要回答