2016-10-02 22 views
1

else句のあるforループ内にあるときに、continueステートメントがどのように解釈されるのか分かりません。continue文の他の部分はどのように機能しますか?

条件が真の場合、breakforループから終了し、else部分は実行されません。条件がFalseの場合はelse部分が実行されます。

しかし、何について約continue声明?私はそれがステートメントに達した後、elseの部分が実行されるように見えます。これは本当ですか??私は、リストから「迷惑メール」を削除した場合、今の状態は常にfalseで、見つかっていないが、それでもelse部分が実行され

# when condition found and it's `true` then `else` part is executing : 

edibles = ["ham", "spam", "eggs","nuts"] 
for food in edibles: 
    if food == "spam": 
     print("No more spam please!") 
     continue 
    print("Great, delicious " + food) 

else: 
    print("I am so glad: No spam!") 
print("Finally, I finished stuffing myself")` 

edibles = ["ham","eggs","nuts"] 
for food in edibles: 
    if food == "spam": 
     print("No more spam please!") 
     continue 
    print("Great, delicious " + food) 

else: 
    print("I am so glad: No spam!") 
print("Finally, I finished stuffing myself") 
+0

'for/else'は' break'のみを使用し、 'else'は' continue'を気にしません - それは 'for-break-else'構造です。 (@Charlesの回答を参照) – furas

答えて

2

あなたelse部分ここでのコード例でありますどちらの場合でも実行されます。 else条件が見つからなかったときにループが終了したときに実行される部分。コード内で何が起きていますか。でも、continueの文がなければ同じように動作します。

は今何break文の他の部分については、break文の他の部分は、場合にのみ実行されます。

  • ループは任意の休憩なしで正常に完了した場合。
  • ループにブレークがない場合。 Pythonでforループを有する

enter image description here

+0

ありがとう:)私はあなたの説明がこの質問に答えることができますか? http://stackoverflow.com/questions/40006300/how-two-recursion-function-in-program-works#40006300 –

4

ループが正常に終了したとき、elseブロックが実行され、すなわち何break文はありません。 continueはどちらにも影響しません。

breakステートメントのためにforループが終了した場合、elseブロックは実行されません。ループが正常に終了する場合(no break)、elseブロックが実行されます。 docsから

:try文のelse節がしたときに実行される:

ループで使用

、else節がif文のことをそれがないよりも、try文のelse節と共通の多くを持っています例外は発生せず、ブレークが発生しなければループのelse節が実行されます。

私はいつもレイモンドヘッチャーdescribes itのためにそれを覚えています。彼はelseの代わりにnobreakと呼ばれるべきだと言いました。(それはまたのための-else構文の有用性を説明する良いビデオだ)

例:あなたは上記のコードを実行すると4がリストにないので

numbers = [1,2,3] 
for number in numbers: 
    if number == 4: 
     print("4 was found") 
     break 
else: 
    print("4 was not found") 

、ループはbreakしませんelse句が印刷されます。リストに4を追加してもう一度実行すると、breakとなり、elseは印刷されません。他のほとんどの言語ではfoundのようなセンチネルブール値を追加し、4が見つかった場合はTrueとし、foundFalseの場合はループの後のステートメントのみを出力する必要があります。

+1

もちろん、 'for'(または' while')ループが関数内にあり、ループを途中で 'return'を使用して終了すると、' else'節も実行されません。 –

関連する問題