{"id":1120,"date":"2021-06-06T19:07:00","date_gmt":"2021-06-06T17:07:00","guid":{"rendered":"https:\/\/trzykody.pl\/?page_id=1120"},"modified":"2026-02-20T19:06:21","modified_gmt":"2026-02-20T18:06:21","slug":"petla-for","status":"publish","type":"page","link":"https:\/\/trzykody.pl\/index.php\/python\/petle\/petla-for\/","title":{"rendered":"P\u0119tla for"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>P\u0119tle s\u0105 jednym z podstawowych mechanizm\u00f3w sterowania przep\u0142ywem programu. Umo\u017cliwiaj\u0105 wielokrotne wykonywanie fragmentu kodu w spos\u00f3b kontrolowany. W j\u0119zyku Python konstrukcja <code>for<\/code> opiera si\u0119 na iteracji po obiektach iterowalnych i r\u00f3\u017cni si\u0119 koncepcyjnie od klasycznej p\u0119tli znanej z j\u0119zyk\u00f3w takich jak C. Zrozumienie jej dzia\u0142ania wymaga poznania iterator\u00f3w, protoko\u0142u iteracyjnego oraz funkcji <code>range<\/code>, dlatego poni\u017csze notatki systematyzuj\u0105 zagadnienie.<\/strong><\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Spis tre\u015bci<\/h2><nav><ol><li class=\"\"><a href=\"#petla-for-python-jako-mechanizm-iteracji-po-obiektach-iterowalnych-i-jej-miejsce-wsrod-konstrukcji-sterujacych\">P\u0119tla for Python jako mechanizm iteracji po obiektach iterowalnych i jej miejsce w\u015br\u00f3d konstrukcji steruj\u0105cych<\/a><ol><li class=\"\"><a href=\"#czym-jest-obiekt-iterowalny\">Czym jest obiekt iterowalny<\/a><\/li><li class=\"\"><a href=\"#iteracja-po-napisie\">Iteracja po napisie<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#petla-for-python-a-funkcja-range-i-iteracja-indeksowa-podobna-do-klasycznych-jezykow-c-c\">P\u0119tla for Python a funkcja range i iteracja indeksowa podobna do klasycznych j\u0119zyk\u00f3w C\/C++<\/a><ol><li class=\"\"><a href=\"#range-start-stop-step\">range(start, stop, step)<\/a><\/li><li class=\"\"><a href=\"#odpowiednik-klasycznej-petli-z-c\">Odpowiednik klasycznej p\u0119tli z C<\/a><\/li><li class=\"\"><a href=\"#iteracja-w-dol\">Iteracja w d\u00f3\u0142<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#petla-for-python-oraz-mechanizm-iteratorow-i-protokol-iteracyjny-w-tle-dzialania-konstrukcji\">P\u0119tla for Python oraz mechanizm iterator\u00f3w i protok\u00f3\u0142 iteracyjny w tle dzia\u0142ania konstrukcji<\/a><ol><li class=\"\"><a href=\"#przyklad-recznej-obslugi-iteratora\">Przyk\u0142ad r\u0119cznej obs\u0142ugi iteratora<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#petle-w-pythonie-instrukcje-sterujace-break-continue-oraz-konstrukcja-else-w-petli-for\">P\u0119tle w Pythonie \u2013 instrukcje steruj\u0105ce break, continue oraz konstrukcja else w p\u0119tli for<\/a><ol><li class=\"\"><a href=\"#break\">break<\/a><\/li><li class=\"\"><a href=\"#continue\">continue<\/a><\/li><li class=\"\"><a href=\"#else-w-petli-for\">else w p\u0119tli for<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#petle-w-pythonie-zagniezdzanie-iteracja-po-slownikach-i-rozpakowywanie-krotek\">P\u0119tle w Pythonie \u2013 zagnie\u017cd\u017canie, iteracja po s\u0142ownikach i rozpakowywanie krotek<\/a><ol><li class=\"\"><a href=\"#petle-zagniezdzone\">P\u0119tle zagnie\u017cd\u017cone<\/a><\/li><li class=\"\"><a href=\"#iteracja-po-slowniku\">Iteracja po s\u0142owniku<\/a><\/li><li class=\"\"><a href=\"#enumerate\">enumerate<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#petle-w-pythonie-list-comprehensions-jako-skrocona-forma-petli-for-i-ich-zwiazek-z-klasyczna-konstrukcja\">P\u0119tle w Pythonie \u2013 list comprehensions jako skr\u00f3cona forma p\u0119tli for i ich zwi\u0105zek z klasyczn\u0105 konstrukcj\u0105<\/a><\/li><li class=\"\"><a href=\"#uwagi-praktyczne-najczestsze-bledy-i-nieporozumienia\">Uwagi praktyczne \u2013 najcz\u0119stsze b\u0142\u0119dy i nieporozumienia<\/a><\/li><li class=\"\"><a href=\"#krotkie-zakonczenie\">Kr\u00f3tkie zako\u0144czenie<\/a><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petla-for-python-jako-mechanizm-iteracji-po-obiektach-iterowalnych-i-jej-miejsce-wsrod-konstrukcji-sterujacych\">P\u0119tla for Python jako mechanizm iteracji po obiektach iterowalnych i jej miejsce w\u015br\u00f3d konstrukcji steruj\u0105cych<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W wielu j\u0119zykach (np. C, C++) p\u0119tla <code>for<\/code> ma posta\u0107 tr\u00f3jcz\u0142onow\u0105:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for (inicjalizacja; warunek; modyfikacja) {<br>    instrukcje;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">W Pythonie sk\u0142adnia jest inna:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for element in obiekt_iterowalny:<br>    instrukcje<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nie ma tu jawnego warunku zako\u0144czenia ani licznika steruj\u0105cego w samej konstrukcji. P\u0119tla dzia\u0142a tak d\u0142ugo, jak d\u0142ugo dostarcza kolejne elementy obiekt po prawej stronie s\u0142owa kluczowego <code>in<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Og\u00f3lna sk\u0142adnia:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for zmienna in iterowalny:<br>    blok_kodu<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Blok kodu jest wykonywany dla ka\u017cdego elementu uzyskanego z obiektu iterowalnego. Gdy elementy si\u0119 sko\u0144cz\u0105, p\u0119tla ko\u0144czy dzia\u0142anie.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czym-jest-obiekt-iterowalny\">Czym jest obiekt iterowalny<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Obiekt iterowalny to taki, kt\u00f3ry mo\u017cna przej\u015b\u0107 element po elemencie. W Pythonie nale\u017c\u0105 do nich:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>listy<\/li>\n\n\n\n<li>krotki<\/li>\n\n\n\n<li>napisy<\/li>\n\n\n\n<li>zbiory<\/li>\n\n\n\n<li>s\u0142owniki<\/li>\n\n\n\n<li>obiekty zwracane przez <code>range<\/code><\/li>\n\n\n\n<li>generatory<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad iteracji po li\u015bcie:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">liczby = [10, 20, 30]for x in liczby:<br>    print(x)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wynik:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">10<br>20<br>30<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Zmiennej <code>x<\/code> przypisywana jest kolejno ka\u017cda warto\u015b\u0107 z listy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"iteracja-po-napisie\">Iteracja po napisie<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Napis jest sekwencj\u0105 znak\u00f3w:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">tekst = \"ABC\"for znak in tekst:<br>    print(znak)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ka\u017cdy znak jest osobnym elementem iteracji.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petla-for-python-a-funkcja-range-i-iteracja-indeksowa-podobna-do-klasycznych-jezykow-c-c\">P\u0119tla for Python a funkcja range i iteracja indeksowa podobna do klasycznych j\u0119zyk\u00f3w C\/C++<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cho\u0107 <strong>Python<\/strong> preferuje bezpo\u015bredni\u0105 iteracj\u0119 po elementach, cz\u0119sto potrzebny jest licznik. Do tego s\u0142u\u017cy funkcja <code>range<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"range-start-stop-step\">range(start, stop, step)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>range<\/code> generuje ci\u0105g liczb ca\u0142kowitych:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>range(stop)<\/code><\/li>\n\n\n\n<li><code>range(start, stop)<\/code><\/li>\n\n\n\n<li><code>range(start, stop, step)<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for i in range(5):<br>    print(i)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wynik:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">0<br>1<br>2<br>3<br>4<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">G\u00f3rna granica jest wy\u0142\u0105czona.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"odpowiednik-klasycznej-petli-z-c\">Odpowiednik klasycznej p\u0119tli z C<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">C:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for (int i = 0; i &lt; 5; i++) {<br>    printf(\"%d\\n\", i);<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Python:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for i in range(0, 5, 1):<br>    print(i)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">W C++ analogicznie:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;iostream&gt;int main() {<br>    for (int i = 0; i &lt; 5; i++) {<br>        std::cout &lt;&lt; i &lt;&lt; std::endl;<br>    }<br>    return 0;<br>}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"iteracja-w-dol\">Iteracja w d\u00f3\u0142<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">for i in range(5, 0, -1):<br>    print(i)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wynik:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">5<br>4<br>3<br>2<br>1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u015bli <code>step<\/code> jest ujemny, <code>start<\/code> musi by\u0107 wi\u0119kszy od <code>stop<\/code>, inaczej p\u0119tla si\u0119 nie wykona.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petla-for-python-oraz-mechanizm-iteratorow-i-protokol-iteracyjny-w-tle-dzialania-konstrukcji\">P\u0119tla for Python oraz mechanizm iterator\u00f3w i protok\u00f3\u0142 iteracyjny w tle dzia\u0142ania konstrukcji<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Za konstrukcj\u0105 <code>for<\/code> stoi tzw. protok\u00f3\u0142 iteracyjny.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Obiekt iterowalny:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Implementuje metod\u0119 <code>__iter__()<\/code><\/li>\n\n\n\n<li>Zwraca iterator<\/li>\n\n\n\n<li>Iterator implementuje metod\u0119 <code>__next__()<\/code><\/li>\n\n\n\n<li><code>__next__()<\/code> zwraca kolejne elementy a\u017c do zg\u0142oszenia wyj\u0105tku <code>StopIteration<\/code><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Schematycznie p\u0119tla:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">iterator = iter(obiekt)<br>while True:<br>    try:<br>        element = next(iterator)<br>        # blok kodu<br>    except StopIteration:<br>        break<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To wyja\u015bnia, dlaczego <code>for<\/code> dzia\u0142a dla tak wielu struktur danych.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"przyklad-recznej-obslugi-iteratora\">Przyk\u0142ad r\u0119cznej obs\u0142ugi iteratora<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">lista = [1, 2, 3]<br>it = iter(lista)print(next(it))<br>print(next(it))<br>print(next(it))<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Czwarte wywo\u0142anie <code>next(it)<\/code> spowoduje wyj\u0105tek <code>StopIteration<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petle-w-pythonie-instrukcje-sterujace-break-continue-oraz-konstrukcja-else-w-petli-for\">P\u0119tle w Pythonie \u2013 instrukcje steruj\u0105ce break, continue oraz konstrukcja else w p\u0119tli for<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"break\">break<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Natychmiast przerywa p\u0119tl\u0119.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for i in range(10):<br>    if i == 5:<br>        break<br>    print(i)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Zostan\u0105 wypisane liczby 0\u20134.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"continue\">continue<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pomija bie\u017c\u0105c\u0105 iteracj\u0119.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for i in range(5):<br>    if i == 2:<br>        continue<br>    print(i)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nie zostanie wypisana liczba 2.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"else-w-petli-for\">else w p\u0119tli for<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">W Pythonie p\u0119tla <code>for<\/code> mo\u017ce mie\u0107 blok <code>else<\/code>, kt\u00f3ry wykona si\u0119 tylko wtedy, gdy p\u0119tla zako\u0144czy si\u0119 naturalnie (bez <code>break<\/code>).<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for i in range(5):<br>    print(i)<br>else:<br>    print(\"Koniec bez przerwania\")<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u015bli wstawimy <code>break<\/code>, blok <code>else<\/code> nie zostanie wykonany.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To bywa u\u017cywane przy wyszukiwaniu elementu:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">szukana = 7<br>lista = [1, 3, 5]for x in lista:<br>    if x == szukana:<br>        print(\"Znaleziono\")<br>        break<br>else:<br>    print(\"Nie znaleziono\")<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petle-w-pythonie-zagniezdzanie-iteracja-po-slownikach-i-rozpakowywanie-krotek\">P\u0119tle w Pythonie \u2013 zagnie\u017cd\u017canie, iteracja po s\u0142ownikach i rozpakowywanie krotek<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"petle-zagniezdzone\">P\u0119tle zagnie\u017cd\u017cone<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">for i in range(3):<br>    for j in range(2):<br>        print(i, j)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Liczba iteracji to iloczyn zakres\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"iteracja-po-slowniku\">Iteracja po s\u0142owniku<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Domy\u015blnie iterujemy po kluczach:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">slownik = {\"a\": 1, \"b\": 2}for klucz in slownik:<br>    print(klucz)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Iteracja po parach klucz\u2013warto\u015b\u0107:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for k, v in slownik.items():<br>    print(k, v)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tu nast\u0119puje rozpakowanie krotki <code>(klucz, warto\u015b\u0107)<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"enumerate\">enumerate<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u015bli potrzebny jest indeks i warto\u015b\u0107:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">lista = [\"a\", \"b\", \"c\"]for indeks, wartosc in enumerate(lista):<br>    print(indeks, wartosc)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>enumerate<\/code> zwraca pary <code>(indeks, element)<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petle-w-pythonie-list-comprehensions-jako-skrocona-forma-petli-for-i-ich-zwiazek-z-klasyczna-konstrukcja\">P\u0119tle w Pythonie \u2013 list comprehensions jako skr\u00f3cona forma p\u0119tli for i ich zwi\u0105zek z klasyczn\u0105 konstrukcj\u0105<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">List comprehension to skr\u00f3cona forma tworzenia listy:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">wynik = [x * 2 for x in range(5)]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Odpowiednik klasyczny:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">wynik = []<br>for x in range(5):<br>    wynik.append(x * 2)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Mo\u017cliwe jest dodanie warunku:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">wynik = [x for x in range(10) if x % 2 == 0]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nale\u017cy uwa\u017ca\u0107 na czytelno\u015b\u0107. Zagnie\u017cd\u017cone comprehensions szybko staj\u0105 si\u0119 trudne do analizy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"uwagi-praktyczne-najczestsze-bledy-i-nieporozumienia\">Uwagi praktyczne \u2013 najcz\u0119stsze b\u0142\u0119dy i nieporozumienia<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Modyfikowanie listy w trakcie iteracji<\/strong> lista = [1, 2, 3]<br>for x in lista:<br>lista.remove(x) To prowadzi do pomijania element\u00f3w. Bezpieczniej iterowa\u0107 po kopii: for x in lista[:]:<br>lista.remove(x)<\/li>\n\n\n\n<li><strong>Niezrozumienie zakresu w range<\/strong> <code>range(5)<\/code> nie zawiera liczby 5.<\/li>\n\n\n\n<li><strong>Mylenie iteracji po indeksach z iteracj\u0105 po warto\u015bciach<\/strong> W Pythonie rzadko potrzeba indeks\u00f3w. Bezpo\u015brednia iteracja jest bezpieczniejsza.<\/li>\n\n\n\n<li><strong>Zbyt g\u0142\u0119bokie zagnie\u017cd\u017cenie<\/strong> Wielopoziomowe p\u0119tle cz\u0119sto wskazuj\u0105 na problem algorytmiczny (z\u0142o\u017cono\u015b\u0107 O(n\u00b2), O(n\u00b3)).<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"krotkie-zakonczenie\">Kr\u00f3tkie zako\u0144czenie<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>P\u0119tla <code>for<\/code> w Pythonie<\/strong> jest konstrukcj\u0105 opart\u0105 na iteracji, a nie na warunku logicznym jak w C. Jej zrozumienie wymaga poj\u0119cia iteratora i protoko\u0142u iteracyjnego. W praktyce pozwala pisa\u0107 kod zwi\u0119z\u0142y i czytelny, pod warunkiem \u017ce u\u017cywa si\u0119 jej zgodnie z modelem j\u0119zyka, a nie przez przenoszenie bezpo\u015brednio wzorc\u00f3w z innych j\u0119zyk\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>P\u0119tle s\u0105 jednym z podstawowych mechanizm\u00f3w sterowania przep\u0142ywem programu. Umo\u017cliwiaj\u0105 wielokrotne wykonywanie fragmentu kodu w spos\u00f3b kontrolowany. W j\u0119zyku Python konstrukcja for opiera si\u0119 na iteracji po obiektach iterowalnych i r\u00f3\u017cni si\u0119 koncepcyjnie od klasycznej p\u0119tli znanej z j\u0119zyk\u00f3w takich jak C. Zrozumienie jej dzia\u0142ania wymaga poznania iterator\u00f3w, protoko\u0142u iteracyjnego oraz funkcji range, dlatego poni\u017csze notatki systematyzuj\u0105 zagadnienie. P\u0119tla for Python jako mechanizm iteracji po obiektach iterowalnych i jej miejsce w\u015br\u00f3d konstrukcji steruj\u0105cych W wielu j\u0119zykach (np. C, C++) p\u0119tla for ma posta\u0107 tr\u00f3jcz\u0142onow\u0105: for (inicjalizacja; warunek; modyfikacja) { instrukcje;} W Pythonie sk\u0142adnia jest inna: for element in obiekt_iterowalny: instrukcje Nie ma tu jawnego warunku zako\u0144czenia ani licznika steruj\u0105cego w samej konstrukcji. P\u0119tla dzia\u0142a tak d\u0142ugo, jak d\u0142ugo dostarcza kolejne elementy obiekt po prawej stronie s\u0142owa kluczowego in. Og\u00f3lna sk\u0142adnia: for zmienna in iterowalny: blok_kodu Blok kodu jest wykonywany dla ka\u017cdego elementu uzyskanego z obiektu iterowalnego. Gdy elementy si\u0119 sko\u0144cz\u0105, p\u0119tla ko\u0144czy dzia\u0142anie. Czym jest obiekt iterowalny Obiekt iterowalny to taki, kt\u00f3ry mo\u017cna przej\u015b\u0107 element po elemencie. W Pythonie nale\u017c\u0105 do nich: Przyk\u0142ad iteracji po li\u015bcie: liczby = [10, 20, 30]for x in liczby: print(x) Wynik: 102030 Zmiennej x przypisywana jest kolejno ka\u017cda warto\u015b\u0107 z listy. Iteracja po napisie Napis jest sekwencj\u0105 znak\u00f3w: tekst = &#8222;ABC&#8221;for znak in tekst: print(znak) Ka\u017cdy znak jest osobnym elementem iteracji. P\u0119tla for Python a funkcja range i iteracja indeksowa podobna do klasycznych j\u0119zyk\u00f3w C\/C++ Cho\u0107 Python preferuje bezpo\u015bredni\u0105 iteracj\u0119 po elementach, cz\u0119sto potrzebny jest licznik. Do tego s\u0142u\u017cy funkcja range. range(start, stop, step) range generuje ci\u0105g liczb ca\u0142kowitych: Przyk\u0142ad: for i in range(5): print(i) Wynik: 01234 G\u00f3rna granica jest wy\u0142\u0105czona. Odpowiednik klasycznej p\u0119tli z C C: for (int i = 0; i &lt; 5; i++) { printf(&#8222;%d\\n&#8221;, i);} Python: for i in range(0, 5, 1): print(i) W C++ analogicznie: #include &lt;iostream&gt;int main() { for (int i = 0; i &lt; 5; i++) { std::cout &lt;&lt; i &lt;&lt; std::endl; } return 0;} Iteracja w d\u00f3\u0142 for i in range(5, 0, -1): print(i) Wynik: 54321 Je\u015bli step jest ujemny, start musi by\u0107 wi\u0119kszy od stop, inaczej p\u0119tla si\u0119 nie wykona. P\u0119tla for Python oraz mechanizm iterator\u00f3w i protok\u00f3\u0142 iteracyjny w tle dzia\u0142ania konstrukcji Za konstrukcj\u0105 for stoi tzw. protok\u00f3\u0142 iteracyjny. Obiekt iterowalny: Schematycznie p\u0119tla: iterator = iter(obiekt)while True: try: element = next(iterator) # blok kodu except StopIteration: break To wyja\u015bnia, dlaczego for dzia\u0142a dla tak wielu struktur danych. Przyk\u0142ad r\u0119cznej obs\u0142ugi iteratora lista = [1, 2, 3]it = iter(lista)print(next(it))print(next(it))print(next(it)) Czwarte wywo\u0142anie next(it) spowoduje wyj\u0105tek StopIteration. P\u0119tle w Pythonie \u2013 instrukcje steruj\u0105ce break, continue oraz konstrukcja else w p\u0119tli for break Natychmiast przerywa p\u0119tl\u0119. for i in range(10): if i == 5: break print(i) Zostan\u0105 wypisane liczby 0\u20134. continue Pomija bie\u017c\u0105c\u0105 iteracj\u0119. for i in range(5): if i == 2: continue print(i) Nie zostanie wypisana liczba 2. else w p\u0119tli for W Pythonie p\u0119tla for mo\u017ce mie\u0107 blok else, kt\u00f3ry wykona si\u0119 tylko wtedy, gdy p\u0119tla zako\u0144czy si\u0119 naturalnie (bez break). for i in range(5): print(i)else: print(&#8222;Koniec bez przerwania&#8221;) Je\u015bli wstawimy break, blok else nie zostanie wykonany. To bywa u\u017cywane przy wyszukiwaniu elementu: szukana = 7lista = [1, 3, 5]for x in lista: if x == szukana: print(&#8222;Znaleziono&#8221;) breakelse: print(&#8222;Nie znaleziono&#8221;) P\u0119tle w Pythonie \u2013 zagnie\u017cd\u017canie, iteracja po s\u0142ownikach i rozpakowywanie krotek P\u0119tle zagnie\u017cd\u017cone for i in range(3): for j in range(2): print(i, j) Liczba iteracji to iloczyn zakres\u00f3w. Iteracja po s\u0142owniku Domy\u015blnie iterujemy po kluczach: slownik = {&#8222;a&#8221;: 1, &#8222;b&#8221;: 2}for klucz in slownik: print(klucz) Iteracja po parach klucz\u2013warto\u015b\u0107: for k, v in slownik.items(): print(k, v) Tu nast\u0119puje rozpakowanie krotki (klucz, warto\u015b\u0107). enumerate Je\u015bli potrzebny jest indeks i warto\u015b\u0107: lista = [&#8222;a&#8221;, &#8222;b&#8221;, &#8222;c&#8221;]for indeks, wartosc in enumerate(lista): print(indeks, wartosc) enumerate zwraca pary (indeks, element). P\u0119tle w Pythonie \u2013 list comprehensions jako skr\u00f3cona forma p\u0119tli for i ich zwi\u0105zek z klasyczn\u0105 konstrukcj\u0105 List comprehension to skr\u00f3cona forma tworzenia listy: wynik = [x * 2 for x in range(5)] Odpowiednik klasyczny: wynik = []for x in range(5): wynik.append(x * 2) Mo\u017cliwe jest dodanie warunku: wynik = [x for x in range(10) if x % 2 == 0] Nale\u017cy uwa\u017ca\u0107 na czytelno\u015b\u0107. Zagnie\u017cd\u017cone comprehensions szybko staj\u0105 si\u0119 trudne do analizy. Uwagi praktyczne \u2013 najcz\u0119stsze b\u0142\u0119dy i nieporozumienia Kr\u00f3tkie zako\u0144czenie P\u0119tla for w Pythonie jest konstrukcj\u0105 opart\u0105 na iteracji, a nie na warunku logicznym jak w C. Jej zrozumienie wymaga poj\u0119cia iteratora i protoko\u0142u iteracyjnego. W praktyce pozwala pisa\u0107 kod zwi\u0119z\u0142y i czytelny, pod warunkiem \u017ce u\u017cywa si\u0119 jej zgodnie z modelem j\u0119zyka, a nie przez przenoszenie bezpo\u015brednio wzorc\u00f3w z innych j\u0119zyk\u00f3w.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1116,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1120","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/comments?post=1120"}],"version-history":[{"count":2,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1120\/revisions"}],"predecessor-version":[{"id":1122,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1120\/revisions\/1122"}],"up":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1116"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}