2017-09-21 2 views
0

Ich bin neu zu Python, aber ich denke, reservierte Wörter müssen ähnliche Bedeutung in der Programmierung haben. Allerdings weiß ich nicht, warum die break innerhalb der 2. if-condition zwei for-loop bricht.Python brechen für Schleife

Ich möchte überprüfen, ob die Liste leer ist oder nicht, also verwende ich eine while-loop. Es wird angenommen, dass, wenn newList noch Elemente enthält, es in der loop2 bleiben wird. Nach dem break in con2 geht es jedoch direkt an loop1 noch newList hat noch Element.

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

Vereinfachen Sie Ihren Code bitte. Bitte lesen Sie ["So erstellen Sie ein minimales, vollständiges und überprüfbares Beispiel"] (https://stackoverflow.com/help/mcve). –

+0

Eine break-Anweisung bricht nur von einer Schleife ab. Können Sie den Inhalt der 'newList' Datenstruktur bereitstellen? – AK47

+0

Ich habe es vereinfacht – androidnewbie

Antwort

1

Ihre break Aussage von beiden Schleifen bricht, denn wenn man nur schauen, bevor Sie die erste break Anweisung ausführen, weisen Sie den Wert y auf die Variable result. Nachdem Sie break von Ihrer ersten Schleife, die nächste Zeile, die if (result == 'y'): sind getestet wird und dann break Sie wieder

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

Update: In Python können Sie eine else Klausel zu einer Schleife hinzufügen und diese else Klausel wird nur dann ausgeführt, wenn die Schleife hat vollständig ausgeführt, dh nie erreicht break Anweisung

+0

Ja, es bricht die "Eltern" -Schleife, also sollte es zu "loop2" gehen, aber es geht zu "loop1", was bedeutet, dass es den 'für Knoten in newList:' Schleife – androidnewbie

+1

Wie viele Werte sind in 'newList' ? Sind Sie sicher, dass das Brechen bei der letzten Iteration nicht auftritt? – AK47

+0

Natürlich tue ich, wie ich sogar die 'newList' in' con2' drucke – androidnewbie