前20个值是真的

时间:2017-09-12 14:32:31

标签: python-3.x

for n in range(561,1000):
if n is not isprime2(n) and isprimelike(n):
    print(n,isprimelike(n))

我希望我的函数能够打印满足此条件的前20个值,而不是打印整个范围。就像一旦它看到20个值使这个条件成立,就停止。

2 个答案:

答案 0 :(得分:2)

首先,我假设这是一个错字:if n is not isprime2(n) and isprimelike(n)毫无意义。你想要if not isprime2(n) and isprimelike(n)

要解决这个问题,我会创建一个生成器理解,其中包含循环条件:

(n for n in range(561,1000) if not isprime2(n) and isprimelike(n))

(您不需要打印isprimelike,因为在您的情况下为True,我们会过滤False个值

然后将它集成到循环20次并获得20次第一次迭代,在一行中:

[next(n for n in range(561,1000) if not isprime2(n) and isprimelike(n)) for _ in range(20)]

或(由Jon提供),使用itertools.islice,如果没有足够的值(在这种情况下上面的解决方案StopIteration)会更好

list(itertools.islice((n for n in range(561,1000) if not isprime2(n) and isprimelike(n)),20))

答案 1 :(得分:1)

当然,有一种更简单的方法可以完成这项任务,一种简单易行的方法是简单地创建一个存储打印量的变量。

AoPrints = 0 # Amount of Prints
for n in range(561,1000):
  if n is not isprime2(n) and isprimelike(n): # NOTE: the first condition here does not look accurate
    print(n,isprimelike(n))
    AoPrints = AoPrints+1
    if AoPrints > 20:
      break # Exit the for-loop