Wpis z mikrobloga

https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops
kod się dobrze nie wkleja...

Mógłby ktoś wytłumaczyć jak ten nested loop rozumieć? Znalazłem już wiele "wytłumaczeń" w sieci ale dalej nie rozumiem:
1.Jak to się loopuje w ogóle? Zależnie gdzie sprawdza się print wychodzi całkiem co innego. Mógłby to ktoś rozpisać?
2.Jak (2, 2) wpada w else clause?
3.Czemu przy n=9 x jest 3?
I tak dalej...

  • 5
@loser7
1. Zasieg wewnętrznej petli zalezy od zewnętrznej, zasieg pierwszej petli wewnętrznej to od 2 do 2. Drugiej 2 do 3, itd.
2. Masz petle od 2 do 2. Drugi argument w petli jest o 1 wiekszy od tego, do ktorego petla idzie. Wiec realnie masz pętle od 2 do 1 z krokiem +1, dlatego wpada w else.
3. Bo 9/3=3 i reszty 0, tam jest wykorzystywane modulo.
@loser7: dla każdego 2 <= n < 9 bierzesz każde 2 <= x < n. Jeśli x dzieli n, to wypisujesz '... equals ...' i robisz break. Jeżeli nigdy nie zrobiłeś break, odpali się else i wypisze '... is a prime number'.

range(2, 5) = [2, 3, 4]
range(2, 2) = []
@wczoraj: tak

@CytrynowySorbet: 1. czyli pętla #1 nie powtarza się ani nie dodaje w ogóle(2,2/2,3/2,4 etc) tylko zostaje jako (2, 10)?
2. dziwne, ale niech będzie
3. to wiem, ale skąd nagle do x dodało jeden, skoro przy wcześniejszych if i else wciąż było jako 2?
@loser7 tak, pierwsza pętla to stałe 2-10, dopiero druga ma zmienny zasięg.
Drugie lepiej według mnie wyjaśnił Lerhond.
Zauważ, ze te wcześniejsze to były liczby parzyste, więc pętla się przerywała już na 2,bo spełnia ona warunek w if, dla 9 przy 2 warunek nie jest spełniony, więc pętla "zwiększyła" się o 1 i dla 3 ten if juz jest spełniony, dlatego tam jest 3.