gpt4 book ai didi

python - 无法弄清楚如何使用 all() 在我的 "code"中工作

转载 作者:太空宇宙 更新时间:2023-11-03 12:41:27 26 4
gpt4 key购买 nike

m = range(1, 2000000, 2)
sum1 = 2
for x in xrange(1, 2000000, 2):
for y in m:
if x != y:
if x%y == 0:
m.remove(x)
if all(x%y != 0):
sum1 += x

这就是我写的。这是关于一个问题,试图将所有低于 200 万的素数相加。我的问题出在 all() 语句中。我想要发生的是检查 x 是否是素数;仅当每个 x%y 给出余数时才为真。

此外,如果我使用 a,我可以使用语句(break?)来停止循环,如果 y > x/3 如下所示:

 m = range(1, 2000000, 2)
sum1 = 2
for x in xrange(1, 2000000, 2):
for y in m:
if y > x/3:
break
else:
if x != y:
if x%y == 0:
m.remove(x)
if all(x%y != 0):
sum1 += x

最佳答案

您必须将一个序列或可迭代对象传递给 all —— 它只是测试传递给它的所有项目是否都评估为真。以下是使用 all 的正确方法:

>>> all([True, True, True])
True
>>> all([True, False, True])
False
>>> all([x > 5 for x in range(10)])
False
>>> all([x > 5 for x in range(6, 10)])
True
>>> all(x > 5 for x in range(6, 10))
True

最后一个是最好的,因为它利用了 short-circuiting .

但是,您在代码中调用 all 是没有意义的。在我看来,你的代码背后的想法是遍历 m 中的所有值,并删除那些可以被 2 到 2000000 之间的任何数字整除的值。完成后,m 将只包含质数。

当然,如果您删除all,您的代码仍然无法工作。那是因为您实际上是在测试 m 中的每个数字是否可以被数字 [1, 3, 5, 7...1999999] 整除。 (这是由 xrange(1, 2000000, 2) 表示的序列。因为您从 1 开始,并且所有内容都可以被 1 整除,所以您的code 不会将任何东西视为质数。然后,一旦您从该序列中删除 1,任何可被 2 整除的内容都将被您的代码视为质数!您应该更仔细地考虑关于您实际上必须在内部循环中测试哪些数字。

最后,您应该考虑这段代码将完成多少次循环。即使您完成了这项工作,也需要很长时间 才能生成结果。您应该先在较小的数字上进行测试;然后,您应该考虑如何减少循环次数。 (并且 - 只有在你稍微考虑一下之后 - 阅读 this。)

但是一旦你完成了这项工作,你所要做的就是在你的素数列表上调用 sum

关于python - 无法弄清楚如何使用 all() 在我的 "code"中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10773725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com