为了账号安全,请及时绑定邮箱和手机立即绑定

如何循环模数?

如何循环模数?

暮色呼如 2021-06-14 13:37:52
新手在这里。我一直在试图找到数字 1 到 10 的最小公倍数。到目前为止我的代码def smallest_multiple():a = 0while 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 aprint(smallest_multiple())我的结果是 2520,这似乎是正确的。它是可以被数字 1 到 10 整除而没有余数的最小数字。但是有没有办法通过迭代它们来使 5 行更短(不是那么多的模数)?我试过这样的事情def smallest_multiple():a = 0while True:    a += 1    for i in range(1, 11):        if a % i == 0:            return aprint(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:更短?
查看完整描述

3 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

你可以把它改成

if all([a%i == 0 for i in range(1,11)]):

All 接受一个列表,如果列表中的所有内容都为 True,则返回 True

这使用一个简单的列表理解来遍历数字 1 到 10,并检查它们是否都为 True a%i == 0


查看完整回答
反对 回复 2021-06-16
?
aluckdog

TA贡献1847条经验 获得超7个赞

你可以使用所有:


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


查看完整回答
反对 回复 2021-06-16
?
千万里不及你

TA贡献1784条经验 获得超9个赞

说到单线^^


虽然不是无限循环


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

这不是最有效的解决方案。


查看完整回答
反对 回复 2021-06-16
  • 3 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号