[Python] Jak kontynuować zewnętrzną pętlę z wewnętrznej?


(Fox000) #1

Dopiero zacząłem się uczyć pythona i zaklinowałem się w czymś takim.

for #zewnetrzny 
   for #wewnętrzny 
       if x:
           continue
       else:
           #w tym miejscu jest problem. Chcę żeby przy else wykonał się brake dla wewnętrznego fora ORAZ continue dla zewnetrzego - czyli żeby nie wykonały się kolejne instrukcje z zewnętrznej pętli.
   #instrukcje dla zewnętrznego fora

Jak coś takiego się robi?

PS. Mogę dać samo brake i ustawić flagę która mi wykona continue dalej, ale wydaje mi się że to bardzo brzydkie i można to zrobić w ładny sposób.


(Fizyda) #2

Jak dasz break to przerwiesz najbliższą pętlę - czyli wewnętrzną, zewnętrzna dalej będzie się wykonywała więc nic nie musisz dalej robić. Continue robi breaka, ale dla konkretnej iteracji, po prostu dalszy kod nie będzie w tej iteracji interpretowany.

(Nie znam pythona poprawcie mnie jeśli się mylę)


(Fox000) #3

no więc?


(kostek135) #4

W zewnętrznym for, na początku, powinieneś ustawiać zmienną powiedzmy leftInternalForByBreak na false, jeśli wejdziesz w else w wewnetrznym for to powinieneś tę zmienną przestawić na true tuż przed break. Tam gdzie masz “instrukcje dla zewnętrznego for” przed powinieneś wstawić warunek logiczny sprawdzający czy leftInternalForByBreak jest prawdą, jeżeli tak, to continue.

Ktokolwiek będzie musiał zajrzeć w ten kod będzie cię przeklinał (prawdopodobnie patrząc na strukturę już by tak było) i zapewne to co zrobiłeś da się uprościć / zrobić czytelniejsze.


(enedil) #5

Właściwie, istnieje do tego sensowne rozwiązanie, i brzmi

for #zewnetrzny:
    for #wewnętrzny:
        if x:
            break
    else:
        # pętla się nie przerwała, czyli tutaj umieszczasz instrukcje dla zewnętrznego fora
        #...