2017-09-12 10 views
1
for n in range(561,1000): 
if n is not isprime2(n) and isprimelike(n): 
    print(n,isprimelike(n)) 

私は、全範囲を印刷するのではなく、この条件を満たす最初の20個の値を印刷するようにします。一度、この条件を真とする20の値が見えるように、停止します。最初の20個の値が真である

+0

'nが存在しない場合には優れているitertools.isliceを使用すると、'私には奇妙に見える(n)をisprime2ではありません。 isprime2(n)とisprimelike(n): 'ならないのですか? (インデントを修正してください) –

答えて

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 
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)) 

(あなたはそれがあなたのケースで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)) 
+0

'isprimelike'が高価な場合 - 一度だけ計算したいかもしれません –

+0

@JonClements True。 'isprimelike'は実際にはこの時点で常に真です。それを出力する必要はありません。 –

+0

そして最初の20を取る... 'isliceのnのために(your_gen_exp、20):print(n)' ...(または 'list(islice(genexp、20))' –

関連する問題