2017-09-21 17 views
0

私はPythonに新しくなっていますが、予約語はプログラミングで同様の意味を持っている必要があります。しかし、私はなぜbreak 2番目のif-condition内の2つが壊れているのか分からないfor-loopPython break for loop

リストが空であるかどうかをチェックしたいので、while-loopを使用します。 newListにまだ要素がある場合は、loop2にとどまると考えられます。しかし、breakcon2の後には、loop1に直接行きます。newListにも要素があります。

while list: 
    print ("loop1") 
    result = 'n' 
    for e in list: 
     print ("loop2") 
     result = 'n' 
     for h in longList: 
      print ("loop3") 
      for i in e.getList(): 
       print ("loop4") 
       if (i == h.getId()): 
        print ("con1") 
        result = 'y' 
        break 
      if (result == 'y'): 
       print ("con2") 
       break 
+0

コードを簡略化してください。 [最小限で完全で検証可能なサンプルを作成する方法](https://stackoverflow.com/help/mcve)をお読みください。 –

+0

breakステートメントは、1つのループからのみ壊れます。 'newList'データ構造のコンテンツを提供できますか? – AK47

+0

私はそれを簡略化しました – androidnewbie

答えて

1

あなたが最初break文を実行する直前に見た場合、あなたは変数resultに値yを割り当てるので、あなたのbreak文は、両方のループから破壊されます。もしあなたの最初のループからbreakした後、試験を取得し、次の行がif (result == 'y'):され、その後、あなたbreak再び

while newList: 
    print ("loop1") 
    result = 'n' 
    for node in newList: 
     print ("loop2") 
     result = 'n' 
     for parent in parents: 
      print ("loop3") 
      for neighbourId in node.getNeighbours(): 
       print ("loop4") 
       if (neighbourId == parent.getId()): 
        print ("con1") 
        result = 'y' # assignment 
        break # first break 
      if (result == 'y'): # occurs after the first break and will be true 
       print ("con2") 
       break # second break 
    else: 
     print('This loop was not terminated with a break statement') 
else: 
    print('while loop ended') 

更新: Pythonでは、あなたがループにelse句を追加することができ、これelse節がいる場合にのみ実行されますループが完全に実行されました。つまり、breakという文には決して到達しませんでした。

+0

これは 'parent'ループを壊すので、' loop2'に行くべきですが、 'loop1'に行きます。つまり' forList in newList: 'ループを壊すことを意味します。 – androidnewbie

+1

'newList' ?あなたは最後の反復で壊れていないことが確実ですか? – AK47

+0

もちろん、私は 'con2'の中に' newList'を印刷していました。 – androidnewbie