for n in range(561,1000):
if n is not isprime2(n) and isprimelike(n):
print(n,isprimelike(n))
私は、全範囲を印刷するのではなく、この条件を満たす最初の20個の値を印刷するようにします。一度、この条件を真とする20の値が見えるように、停止します。最初の20個の値が真である
for n in range(561,1000):
if n is not isprime2(n) and isprimelike(n):
print(n,isprimelike(n))
私は、全範囲を印刷するのではなく、この条件を満たす最初の20個の値を印刷するようにします。一度、この条件を真とする20の値が見えるように、停止します。最初の20個の値が真である
もちろん、この作業を完了する簡単な方法があります。これを行う簡単な方法は、単に印刷の量を格納する変数を作成することです。
すなわち
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
まず、私は、これはタイプミスであると仮定しています: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))
(あなたはそれがあなたのケースでTrue
あるので、isprimelike
を印刷する必要はありません、我々濾過False
値アウト)
は、1つの行に、ループ20回それをintergrate 20第一回の反復を得る:
[next(n for n in range(561,1000) if not isprime2(n) and isprimelike(n)) for _ in range(20)]
または(ジョンへの礼儀)、十分な値(溶液は、上記のような場合でStopIteration
をスロー)
list(itertools.islice((n for n in range(561,1000) if not isprime2(n) and isprimelike(n)),20))
'isprimelike'が高価な場合 - 一度だけ計算したいかもしれません –
@JonClements True。 'isprimelike'は実際にはこの時点で常に真です。それを出力する必要はありません。 –
そして最初の20を取る... 'isliceのnのために(your_gen_exp、20):print(n)' ...(または 'list(islice(genexp、20))' –
'nが存在しない場合には優れている
itertools.islice
を使用すると、'私には奇妙に見える(n)をisprime2ではありません。 isprime2(n)とisprimelike(n): 'ならないのですか? (インデントを修正してください) –