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的列表?
答案 0 :(得分: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整除。非空列表在布尔上下文中的计算结果为true,因此你将在第一次迭代时输入if块。
内置函数all()
接受一个iterable并仅在每个元素为真时返回True
(或在布尔上下文中计算为true)。因此,它非常适合确定i
是否可以被divisors
中的所有值整除。
答案 1 :(得分: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
块运行。