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的列表?
发布于 2013-06-28 23:14:46
尝试将其更改为以下内容:
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 (或在布尔上下文中计算为true )时才返回True。因此,它非常适合确定i是否可以被整除-- divisors中的所有值。
发布于 2013-06-28 23:23:37
让我们把它分解。首先,
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块。
https://stackoverflow.com/questions/17374957
复制相似问题