for n in range(561,1000):
if n is not isprime2(n) and isprimelike(n):
print(n,isprimelike(n))
我希望我的函数能够打印满足此条件的前20个值,而不是打印整个范围。就像一旦它看到20个值使这个条件成立,就停止。
答案 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