0
x = False
divisors = [2,3,4,5,6,7,8,9,10]
for i in range (10,10000,10):
    if [x for x in divisors if i % x == 0]:
        print(i)
        break

我能得到一些关于为什么这个程序打印 10 的指示吗?它应该打印.. 2520

我现在在这个问题上花了很多时间,我想我不太了解列表理解,它是如何工作的,它返回什么。

如果任何一个部门产生浮点数,我希望 if 语句会产生错误。

我需要使用铸造吗?

我是否在那个范围内 (10,10000,10) 给出了 10, 20, 30, 40,..., 10000 的列表?

4

2 回答 2

4

尝试将其更改为以下内容:

divisors = [2,3,4,5,6,7,8,9,10]
for i in range (10,10000,10):
    if all(i % x == 0 for x in divisors):
         print(i)
         break

当前版本中的列表解析将始终包含最后 3 个值,因为 10 的每个倍数都可以被 2、5 和 10 整除。非空列表在布尔上下文中计算为真,因此您将输入第一次迭代时的 if 块。

内置函数all()接受一个可迭代对象,并且True仅在每个元素为真(或在布尔上下文中计算为真)时才返回。因此,它非常适合确定是否可以被 中的所有i整除。divisors

于 2013-06-28T23:14:46.417 回答
3

让我们分解它。首先,

x = False

除了使您的代码混乱之外,什么都不做。不要用那个。接下来:

for i in range (10,10000,10):

在不查看项目的情况下,请注意 range() 产生的所有值都小于停止值,因此它将以 9990 结束。如果这是您想要的,那很好 - 请注意它。

最后:

    if [x for x in divisors if i % x == 0]:

这读作“创建一个包含所有数字的列表divisors,将其平均划分为 i”,然后“如果我刚刚创建的列表不为空,那么……”。因此,当 时i == 10,该列表的计算结果为[2, 5, 10]。这不是一个空列表,因此它评估为True并且if块运行。

于 2013-06-28T23:23:37.280 回答