Python列表理解(Euler项目5)
我能得到一些关于为什么这个程序打印10的提示吗?它应该打印出来。。2520 我花了这么多时间在这个问题上,我想我真的不理解列表的理解,它是如何工作的,它返回了什么 我希望如果任何一个除法产生一个浮点数,if语句将产生false 我需要使用铸造吗Python列表理解(Euler项目5),python,list,Python,List,我能得到一些关于为什么这个程序打印10的提示吗?它应该打印出来。。2520 我花了这么多时间在这个问题上,我想我真的不理解列表的理解,它是如何工作的,它返回了什么 我希望如果任何一个除法产生一个浮点数,if语句将产生false 我需要使用铸造吗 我是否在该范围内(1010000,10)给出了一个10,20,30,40,…,10000的列表?尝试将其更改为以下内容: x = False divisors = [2,3,4,5,6,7,8,9,10] for i in range (10,10000
我是否在该范围内(1010000,10)给出了一个10,20,30,40,…,10000的列表?尝试将其更改为以下内容:
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
当前版本中的列表理解始终包含最后3个值,因为10的每一个倍数都可以被2、5和10整除。非空列表在布尔上下文中计算为true,因此您将在第一次迭代时输入if块
内置函数
all()
仅当每个元素都为True(或在布尔上下文中计算为True)时才接受iterable并返回True
。因此,它非常适合于确定i
是否可以被除数中的所有值均匀整除,让我们分解它。首先,
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
除了把你的代码弄得乱七八糟之外什么都不做。不要用那个。下一步:
x = False
在不查看项目的情况下,请注意range()生成的所有值都小于stop值,因此将以9990结束。如果这是你想要的,好吧——只是要意识到这一点
最后:
for i in range (10,10000,10):
这句话的意思是“创建一个列表,列出所有在除数中平均分成i的数字”,然后“如果我刚刚创建的列表不是空的,那么……”。所以当i==10
时,该列表的计算结果为[2,5,10]
。这不是一个空列表,因此它的计算结果为True
,并且if
块运行。非常感谢,这确实有效,打印了2520和所有内容。是的,我不知道如何在if计算中应用和逻辑,我想我需要一本关于Python的最新书籍。谢谢你的指点。在编程中有一百万个这样的例子,现在它们对我来说都是空白,所以我能学到的每一个都是巨大的帮助。非常感谢。嘿,我怎样才能做一个没有最大界限的for循环呢?用最大整数值的函数替换10000。你可以使用,for i in count(10,10)
会给你一个从10开始的循环,步骤是10
,它将无限期地运行(或者在中断、返回或引发异常之前)。宾果。在我看来效果更好,而且似乎对收敛时间没有影响,所以很好。
if [x for x in divisors if i % x == 0]: