2017-07-31 23 views
1

私はPythonで新しく、 "break"がforループで動作する方法について混乱しました。そこの例では、(2、10)の範囲内の素数を計算Pythonドキュメント(break and continue Statements)である:forループでブレークはどのように機能しますか?

for n in range(2, 10): 
    for x in range(2, n): 
     if n % x == 0: 
      print(n, 'equals', x, '*', n//x) 
      break 
    else: 
     # loop fell through without finding a factor 
     print(n, 'is a prime number') 

、出力は次のようになります。

2 is a prime number 
3 is a prime number 
4 equals 2 * 2 
5 is a prime number 
6 equals 2 * 3 
7 is a prime number 
8 equals 2 * 4 
9 equals 3 * 3 

しかし私は "休憩" をアウトデントするときコード:

for n in range(2, 10): 
    for x in range(2, n): 
     if n % x == 0: 
      print(n, 'equals', x, '*', n//x) 
     break 
    else: 
     # loop fell through without finding a factor 
     print(n, 'is a prime number') 

出力は次のようになります。

2 is a prime number 
4 equals 2 * 2 
6 equals 2 * 3 
8 equals 2 * 4 

「ブレーク」を克服した後、コードで何が起こるか説明してください。

+5

正確には分かりませんが、 'if'節の中になければ、最初の反復で到達します。 – jonrsharpe

+0

ありがとう、なぜ9が表示されないのですか? –

+0

同じ理由から、他の奇数は印刷されません。あなたが驚いていることははっきりしていません。たとえば、 http://pythontutor.com/ – jonrsharpe

答えて

5

確かめてください。単に「壊れた」とは、もはやそれが先行する「if」の対象にならないことを意味します。

コードはif文を読み取り、それに基づいて動作し、if文が真か偽かに関係なく、 "break"を実行してforループから脱落します。

最初の例では、n%x == 0ステートメントがtrueの場合、コードは 'for'ループから脱落します。

+1

ありがとうございます。 –

+0

心配はいりません。これが満足のいくものであれば、あなたの質問に答えたと言いましょう。もし私に知らせてくれないなら。 – neophlegm

1

は、このコードを実行してくださいありがとう - それは、それがより明確になるかもしれない:

for n in range(2, 10): 
for x in range(2, n): 
    if n % x == 0: 
     print(n, 'equals', x, '*', n//x) 
     break 
    print('loop still running...') 
else: 
    # loop fell through without finding a factor 
    print(n, 'is a prime number') 

対:

for n in range(2, 10): 
for x in range(2, n): 
    if n % x == 0: 
     print(n, 'equals', x, '*', n//x) 
    break 
    print('loop still running...') 
else: 
    # loop fell through without finding a factor 
    print(n, 'is a prime number') 

私は、出力はあなたが何が起こっているかを理解する助けになると確信しています。 #1はif条件が満たされている場合にのみ破られ、#2はif条件が満たされているかどうかに関係なく常に破棄されます。

+0

ありがとうございました。残る唯一の質問は、なぜそれが9を示していないのですか? –

+1

"for"ループで1回だけ実行された後にブレークするためです。あなたは2から始めて、nまで行く。しかし、2(最初の値)では、ループから脱出します。 9の場合、それは3に達する必要がありますが、それは決してありません。 – neophlegm

関連する問題