{"id":1143,"date":"2021-06-15T15:27:00","date_gmt":"2021-06-15T13:27:00","guid":{"rendered":"https:\/\/trzykody.pl\/?page_id=1143"},"modified":"2026-02-20T22:42:35","modified_gmt":"2026-02-20T21:42:35","slug":"petla-while","status":"publish","type":"page","link":"https:\/\/trzykody.pl\/index.php\/python\/petle\/petla-while\/","title":{"rendered":"P\u0119tla while"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">P\u0119tla <code>while<\/code> jest jednym z podstawowych mechanizm\u00f3w sterowania przep\u0142ywem programu. Umo\u017cliwia wielokrotne wykonywanie okre\u015blonego bloku kodu tak d\u0142ugo, jak d\u0142ugo spe\u0142niony jest warunek logiczny. W przeciwie\u0144stwie do p\u0119tli iteracyjnych opartych na kolekcjach (np. <code>for<\/code>), konstrukcja ta opiera si\u0119 wy\u0142\u0105cznie na warunku logicznym i nie wymaga z g\u00f3ry znanej liczby iteracji. Zrozumienie tej konstrukcji jest kluczowe w praktyce programistycznej, dlatego poni\u017csze notatki systematycznie omawiaj\u0105 zagadnienie P\u0119tli while.<\/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-while-skladnia-semantyka-i-sposob-dzialania-warunku-logicznego\">P\u0119tla while \u2013 sk\u0142adnia, semantyka i spos\u00f3b dzia\u0142ania warunku logicznego<\/a><\/li><li class=\"\"><a href=\"#petla-while-wszystko-o-petlach-while-w-python-kontrola-przeplywu-break-continue-else-i-nieskonczone-iteracje\">P\u0119tla while \u2013 kontrola przep\u0142ywu, break, continue, else i niesko\u0144czone iteracje<\/a><ol><li class=\"\"><a href=\"#nieskonczona-petla\">Niesko\u0144czona p\u0119tla<\/a><\/li><li class=\"\"><a href=\"#instrukcja-break\">Instrukcja break<\/a><\/li><li class=\"\"><a href=\"#instrukcja-continue\">Instrukcja continue<\/a><\/li><li class=\"\"><a href=\"#konstrukcja-else-w-petli-while\">Konstrukcja else w p\u0119tli while<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#petla-while-wszystko-o-petlach-while-w-python-wzorce-algorytmiczne-i-zastosowania-praktyczne\">P\u0119tla while \u2013 wzorce algorytmiczne i zastosowania praktyczne<\/a><ol><li class=\"\"><a href=\"#1-zliczanie-iteracyjne\">1. Zliczanie iteracyjne<\/a><\/li><li class=\"\"><a href=\"#2-algorytm-euklidesa-nwd\">2. Algorytm Euklidesa (NWD)<\/a><\/li><li class=\"\"><a href=\"#3-symulacja-procesu-do-momentu-spelnienia-warunku\">3. Symulacja procesu do momentu spe\u0142nienia warunku<\/a><\/li><li class=\"\"><a href=\"#4-odczyt-danych-do-konca-pliku\">4. Odczyt danych do ko\u0144ca pliku<\/a><\/li><li class=\"\"><a href=\"#5-implementacja-odpowiednika-w-c\">5. Implementacja odpowiednika w C<\/a><\/li><li class=\"\"><a href=\"#6-implementacja-w-c\">6. Implementacja w C++<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#roznica-miedzy-while-a-for-w-pythonie\">R\u00f3\u017cnica mi\u0119dzy while a for w Pythonie<\/a><\/li><li class=\"\"><a href=\"#typowe-bledy-i-pulapki\">Typowe b\u0142\u0119dy i pu\u0142apki<\/a><ol><li class=\"\"><a href=\"#1-brak-modyfikacji-zmiennej-sterujacej\">1. Brak modyfikacji zmiennej steruj\u0105cej<\/a><\/li><li class=\"\"><a href=\"#2-modyfikacja-zmiennej-w-zlym-miejscu-przy-continue\">2. Modyfikacja zmiennej w z\u0142ym miejscu przy continue<\/a><\/li><li class=\"\"><a href=\"#3-zbyt-zlozony-warunek-logiczny\">3. Zbyt z\u0142o\u017cony warunek logiczny<\/a><\/li><li class=\"\"><a href=\"#4-nieczytelne-petle-nieskonczone\">4. Nieczytelne p\u0119tle niesko\u0144czone<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#zaleznosci-miedzy-pojeciami-petla-warunek-zmienna-sterujaca-inwariant\">Zale\u017cno\u015bci mi\u0119dzy poj\u0119ciami: p\u0119tla, warunek, zmienna steruj\u0105ca, inwariant<\/a><\/li><li class=\"\"><a href=\"#uwagi-praktyczne\">Uwagi praktyczne<\/a><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petla-while-skladnia-semantyka-i-sposob-dzialania-warunku-logicznego\">P\u0119tla while \u2013 sk\u0142adnia, semantyka i spos\u00f3b dzia\u0142ania warunku logicznego<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Podstawowa sk\u0142adnia w Pythonie:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">while warunek:<br>    instrukcje<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dzia\u0142anie jest deterministyczne i przebiega w nast\u0119puj\u0105cej kolejno\u015bci:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Obliczenie warto\u015bci wyra\u017cenia logicznego <code>warunek<\/code>.<\/li>\n\n\n\n<li>Je\u015bli wynik to <code>True<\/code> \u2013 wykonanie bloku instrukcji.<\/li>\n\n\n\n<li>Powr\u00f3t do punktu 1.<\/li>\n\n\n\n<li>Je\u015bli wynik to <code>False<\/code> \u2013 zako\u0144czenie p\u0119tli.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Kluczowe jest zrozumienie, \u017ce warunek sprawdzany jest <strong>przed ka\u017cd\u0105 iteracj\u0105<\/strong>. Oznacza to, \u017ce je\u015bli pocz\u0105tkowo warunek jest fa\u0142szywy, blok nie wykona si\u0119 ani razu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad minimalny:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">i = 0while i &lt; 5:<br>    print(i)<br>    i = i + 1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Przebieg:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>i = 0 \u2192 0 &lt; 5 \u2192 True \u2192 druk 0<\/li>\n\n\n\n<li>i = 1 \u2192 1 &lt; 5 \u2192 True \u2192 druk 1<\/li>\n\n\n\n<li>&#8230;<\/li>\n\n\n\n<li>i = 5 \u2192 5 &lt; 5 \u2192 False \u2192 koniec<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Warunek mo\u017ce by\u0107 dowolnym wyra\u017ceniem logicznym, r\u00f3wnie\u017c z\u0142o\u017conym:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">while x &gt; 0 and y != 10:<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">W Pythonie nie istnieje specjalny typ warunku \u2013 ka\u017cda warto\u015b\u0107 podlegaj\u0105ca konwersji do typu bool mo\u017ce by\u0107 u\u017cyta w instrukcji <code>while<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Warto\u015bci interpretowane jako False:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>0<\/code><\/li>\n\n\n\n<li><code>0.0<\/code><\/li>\n\n\n\n<li><code>\"\"<\/code><\/li>\n\n\n\n<li><code>[]<\/code><\/li>\n\n\n\n<li><code>None<\/code><\/li>\n\n\n\n<li><code>False<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Wszystko inne jest traktowane jako True.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petla-while-wszystko-o-petlach-while-w-python-kontrola-przeplywu-break-continue-else-i-nieskonczone-iteracje\">P\u0119tla while \u2013 kontrola przep\u0142ywu, break, continue, else i niesko\u0144czone iteracje<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"nieskonczona-petla\">Niesko\u0144czona p\u0119tla<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Najprostsza posta\u0107:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">while True:<br>    print(\"dzia\u0142a bez ko\u0144ca\")<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Warunek zawsze prawdziwy \u2192 p\u0119tla bez ko\u0144ca.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zatrzymanie wymaga instrukcji <code>break<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">while True:<br>    x = int(input(\"Podaj liczb\u0119: \"))<br>    if x == 0:<br>        break<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To typowy schemat przetwarzania danych wej\u015bciowych.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"instrukcja-break\">Instrukcja break<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>break<\/code> natychmiast przerywa dzia\u0142anie p\u0119tli i przechodzi do kodu po niej.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">i = 0while i &lt; 10:<br>    if i == 5:<br>        break<br>    print(i)<br>    i += 1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wynik: 0 1 2 3 4<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla ko\u0144czy si\u0119 przed spe\u0142nieniem warunku ko\u0144cowego.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"instrukcja-continue\">Instrukcja continue<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>continue<\/code> pomija pozosta\u0142\u0105 cz\u0119\u015b\u0107 bie\u017c\u0105cej iteracji i wraca do sprawdzania warunku.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">i = 0while i &lt; 5:<br>    i += 1<br>    if i == 3:<br>        continue<br>    print(i)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wynik: 1 2 4 5<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Warto zwr\u00f3ci\u0107 uwag\u0119, \u017ce modyfikacja zmiennej steruj\u0105cej powinna znajdowa\u0107 si\u0119 przed <code>continue<\/code>, inaczej \u0142atwo o p\u0119tl\u0119 niesko\u0144czon\u0105.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"konstrukcja-else-w-petli-while\">Konstrukcja else w p\u0119tli while<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Python posiada mechanizm:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">while warunek:<br>    instrukcje<br>else:<br>    instrukcje_po_zako\u0144czeniu<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Blok <code>else<\/code> wykona si\u0119 tylko wtedy, gdy p\u0119tla zako\u0144czy si\u0119 naturalnie (bez <code>break<\/code>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">i = 0while i &lt; 3:<br>    print(i)<br>    i += 1<br>else:<br>    print(\"Koniec bez break\")<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u015bli dodamy <code>break<\/code>, blok <code>else<\/code> si\u0119 nie wykona.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To mechanizm rzadko u\u017cywany, ale przydatny np. przy wyszukiwaniu elementu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petla-while-wszystko-o-petlach-while-w-python-wzorce-algorytmiczne-i-zastosowania-praktyczne\">P\u0119tla while \u2013 wzorce algorytmiczne i zastosowania praktyczne<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-zliczanie-iteracyjne\">1. Zliczanie iteracyjne<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Klasyczny licznik:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">n = 10<br>i = 0<br>suma = 0while i &lt;= n:<br>    suma += i<br>    i += 1print(suma)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To odpowiednik matematycznej sumy ci\u0105gu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-algorytm-euklidesa-nwd\">2. Algorytm Euklidesa (NWD)<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">a = 48<br>b = 18while b != 0:<br>    r = a % b<br>    a = b<br>    b = rprint(a)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Mechanizm:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>zamiana argument\u00f3w<\/li>\n\n\n\n<li>operacja modulo<\/li>\n\n\n\n<li>redukcja problemu<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla ko\u0144czy si\u0119, gdy reszta wynosi 0.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3-symulacja-procesu-do-momentu-spelnienia-warunku\">3. Symulacja procesu do momentu spe\u0142nienia warunku<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad \u2013 znajdowanie pierwiastka metod\u0105 przybli\u017ce\u0144:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">x = 25<br>przyblizenie = x<br>epsilon = 0.0001while abs(przyblizenie * przyblizenie - x) &gt; epsilon:<br>    przyblizenie = (przyblizenie + x \/ przyblizenie) \/ 2print(przyblizenie)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Warunek nie jest liczbowy wprost, tylko oparty na b\u0142\u0119dzie przybli\u017cenia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4-odczyt-danych-do-konca-pliku\">4. Odczyt danych do ko\u0144ca pliku<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">plik = open(\"dane.txt\")linia = plik.readline()while linia != \"\":<br>    print(linia.strip())<br>    linia = plik.readline()plik.close()<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">W Pythonie cz\u0119\u015bciej stosuje si\u0119 <code>for<\/code>, ale mechanizm logiczny <code>while<\/code> jest czytelny.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"5-implementacja-odpowiednika-w-c\">5. Implementacja odpowiednika w C<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;stdio.h&gt;int main() {<br>    int i = 0;    while(i &lt; 5) {<br>        printf(\"%d\\n\", i);<br>        i = i + 1;<br>    }    return 0;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Semantyka identyczna: warunek przed wej\u015bciem w blok.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"6-implementacja-w-c\">6. Implementacja w C++<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;iostream&gt;<br>using namespace std;int main() {<br>    int i = 0;    while(i &lt; 5) {<br>        cout &lt;&lt; i &lt;&lt; endl;<br>        i++;<br>    }    return 0;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00f3\u017cnice dotycz\u0105 sk\u0142adni j\u0119zyka, nie logiki.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"roznica-miedzy-while-a-for-w-pythonie\">R\u00f3\u017cnica mi\u0119dzy while a for w Pythonie<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>for<\/code>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>iteracja po sekwencji<\/li>\n\n\n\n<li>znana liczba krok\u00f3w<\/li>\n\n\n\n<li>czytelniejszy przy pracy na kolekcjach<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><code>while<\/code>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>kontrola przez warunek<\/li>\n\n\n\n<li>nieznana liczba iteracji<\/li>\n\n\n\n<li>dobre do algorytm\u00f3w opartych na zbie\u017cno\u015bci<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Zamiana konstrukcji:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">i = 0<br>while i &lt; 5:<br>    print(i)<br>    i += 1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">odpowiada:<\/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\">Jednak <code>while<\/code> daje wi\u0119ksz\u0105 swobod\u0119 w sterowaniu logik\u0105.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"typowe-bledy-i-pulapki\">Typowe b\u0142\u0119dy i pu\u0142apki<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-brak-modyfikacji-zmiennej-sterujacej\">1. Brak modyfikacji zmiennej steruj\u0105cej<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">i = 0<br>while i &lt; 5:<br>    print(i)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla niesko\u0144czona.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-modyfikacja-zmiennej-w-zlym-miejscu-przy-continue\">2. Modyfikacja zmiennej w z\u0142ym miejscu przy continue<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">while i &lt; 5:<br>    if i == 3:<br>        continue<br>    i += 1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Brak zwi\u0119kszenia przed <code>continue<\/code> \u2192 blokada.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3-zbyt-zlozony-warunek-logiczny\">3. Zbyt z\u0142o\u017cony warunek logiczny<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Warunki wielokrotne powinny by\u0107 rozpisane pomocniczo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">warunek = x &gt; 0 and y &lt; 10 and z != 3while warunek:<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Zwi\u0119ksza czytelno\u015b\u0107.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4-nieczytelne-petle-nieskonczone\">4. Nieczytelne p\u0119tle niesko\u0144czone<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Lepszy wzorzec:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">while True:<br>    ...<br>    if warunek_zakonczenia:<br>        break<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">ni\u017c sztuczne:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">flaga = True<br>while flaga:<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"zaleznosci-miedzy-pojeciami-petla-warunek-zmienna-sterujaca-inwariant\">Zale\u017cno\u015bci mi\u0119dzy poj\u0119ciami: p\u0119tla, warunek, zmienna steruj\u0105ca, inwariant<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W analizie algorytmicznej istotne s\u0105:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>warunek p\u0119tli<\/strong> \u2013 okre\u015bla zbi\u00f3r stan\u00f3w dopuszczalnych<\/li>\n\n\n\n<li><strong>zmienna steruj\u0105ca<\/strong> \u2013 wp\u0142ywa na zako\u0144czenie<\/li>\n\n\n\n<li><strong>inwariant p\u0119tli<\/strong> \u2013 w\u0142asno\u015b\u0107 prawdziwa przed i po ka\u017cdej iteracji<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">i = 0<br>suma = 0while i &lt;= n:<br>    suma += i<br>    i += 1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Inwariant: <code>suma<\/code> zawiera sum\u0119 liczb od 0 do i-1.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Analiza poprawno\u015bci algorytmu opiera si\u0119 w\u0142a\u015bnie na inwariancie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"uwagi-praktyczne\">Uwagi praktyczne<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>while<\/code> u\u017cywa\u0107, gdy liczba iteracji nie jest znana z g\u00f3ry.<\/li>\n\n\n\n<li>Unika\u0107 wielokrotnej modyfikacji tej samej zmiennej w kilku miejscach.<\/li>\n\n\n\n<li>Stosowa\u0107 ograniczniki bezpiecze\u0144stwa w algorytmach numerycznych.<\/li>\n\n\n\n<li>Testowa\u0107 przypadek brzegowy: warunek pocz\u0105tkowo fa\u0142szywy.<\/li>\n\n\n\n<li>Przy pracy z wej\u015bciem u\u017cytkownika zawsze uwzgl\u0119dnia\u0107 mo\u017cliwo\u015b\u0107 b\u0142\u0119dnych danych.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla <code>while<\/code> jest konstrukcj\u0105 prost\u0105 sk\u0142adniowo, ale bardzo siln\u0105 semantycznie. Pozwala modelowa\u0107 procesy iteracyjne, algorytmy numeryczne, przetwarzanie danych strumieniowych oraz kontrolowane p\u0119tle niesko\u0144czone. Jej poprawne u\u017cycie wymaga \u015bwiadomego kontrolowania warunku zako\u0144czenia i zmiennych steruj\u0105cych.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>P\u0119tla while jest jednym z podstawowych mechanizm\u00f3w sterowania przep\u0142ywem programu. Umo\u017cliwia wielokrotne wykonywanie okre\u015blonego bloku kodu tak d\u0142ugo, jak d\u0142ugo spe\u0142niony jest warunek logiczny. W przeciwie\u0144stwie do p\u0119tli iteracyjnych opartych na kolekcjach (np. for), konstrukcja ta opiera si\u0119 wy\u0142\u0105cznie na warunku logicznym i nie wymaga z g\u00f3ry znanej liczby iteracji. Zrozumienie tej konstrukcji jest kluczowe w praktyce programistycznej, dlatego poni\u017csze notatki systematycznie omawiaj\u0105 zagadnienie P\u0119tli while. P\u0119tla while \u2013 sk\u0142adnia, semantyka i spos\u00f3b dzia\u0142ania warunku logicznego Podstawowa sk\u0142adnia w Pythonie: while warunek: instrukcje Dzia\u0142anie jest deterministyczne i przebiega w nast\u0119puj\u0105cej kolejno\u015bci: Kluczowe jest zrozumienie, \u017ce warunek sprawdzany jest przed ka\u017cd\u0105 iteracj\u0105. Oznacza to, \u017ce je\u015bli pocz\u0105tkowo warunek jest fa\u0142szywy, blok nie wykona si\u0119 ani razu. Przyk\u0142ad minimalny: i = 0while i &lt; 5: print(i) i = i + 1 Przebieg: Warunek mo\u017ce by\u0107 dowolnym wyra\u017ceniem logicznym, r\u00f3wnie\u017c z\u0142o\u017conym: while x &gt; 0 and y != 10: W Pythonie nie istnieje specjalny typ warunku \u2013 ka\u017cda warto\u015b\u0107 podlegaj\u0105ca konwersji do typu bool mo\u017ce by\u0107 u\u017cyta w instrukcji while. Warto\u015bci interpretowane jako False: Wszystko inne jest traktowane jako True. P\u0119tla while \u2013 kontrola przep\u0142ywu, break, continue, else i niesko\u0144czone iteracje Niesko\u0144czona p\u0119tla Najprostsza posta\u0107: while True: print(&#8222;dzia\u0142a bez ko\u0144ca&#8221;) Warunek zawsze prawdziwy \u2192 p\u0119tla bez ko\u0144ca. Zatrzymanie wymaga instrukcji break: while True: x = int(input(&#8222;Podaj liczb\u0119: &#8222;)) if x == 0: break To typowy schemat przetwarzania danych wej\u015bciowych. Instrukcja break break natychmiast przerywa dzia\u0142anie p\u0119tli i przechodzi do kodu po niej. i = 0while i &lt; 10: if i == 5: break print(i) i += 1 Wynik: 0 1 2 3 4 P\u0119tla ko\u0144czy si\u0119 przed spe\u0142nieniem warunku ko\u0144cowego. Instrukcja continue continue pomija pozosta\u0142\u0105 cz\u0119\u015b\u0107 bie\u017c\u0105cej iteracji i wraca do sprawdzania warunku. i = 0while i &lt; 5: i += 1 if i == 3: continue print(i) Wynik: 1 2 4 5 Warto zwr\u00f3ci\u0107 uwag\u0119, \u017ce modyfikacja zmiennej steruj\u0105cej powinna znajdowa\u0107 si\u0119 przed continue, inaczej \u0142atwo o p\u0119tl\u0119 niesko\u0144czon\u0105. Konstrukcja else w p\u0119tli while Python posiada mechanizm: while warunek: instrukcjeelse: instrukcje_po_zako\u0144czeniu Blok else wykona si\u0119 tylko wtedy, gdy p\u0119tla zako\u0144czy si\u0119 naturalnie (bez break). Przyk\u0142ad: i = 0while i &lt; 3: print(i) i += 1else: print(&#8222;Koniec bez break&#8221;) Je\u015bli dodamy break, blok else si\u0119 nie wykona. To mechanizm rzadko u\u017cywany, ale przydatny np. przy wyszukiwaniu elementu. P\u0119tla while \u2013 wzorce algorytmiczne i zastosowania praktyczne 1. Zliczanie iteracyjne Klasyczny licznik: n = 10i = 0suma = 0while i &lt;= n: suma += i i += 1print(suma) To odpowiednik matematycznej sumy ci\u0105gu. 2. Algorytm Euklidesa (NWD) a = 48b = 18while b != 0: r = a % b a = b b = rprint(a) Mechanizm: P\u0119tla ko\u0144czy si\u0119, gdy reszta wynosi 0. 3. Symulacja procesu do momentu spe\u0142nienia warunku Przyk\u0142ad \u2013 znajdowanie pierwiastka metod\u0105 przybli\u017ce\u0144: x = 25przyblizenie = xepsilon = 0.0001while abs(przyblizenie * przyblizenie &#8211; x) &gt; epsilon: przyblizenie = (przyblizenie + x \/ przyblizenie) \/ 2print(przyblizenie) Warunek nie jest liczbowy wprost, tylko oparty na b\u0142\u0119dzie przybli\u017cenia. 4. Odczyt danych do ko\u0144ca pliku plik = open(&#8222;dane.txt&#8221;)linia = plik.readline()while linia != &#8222;&#8221;: print(linia.strip()) linia = plik.readline()plik.close() W Pythonie cz\u0119\u015bciej stosuje si\u0119 for, ale mechanizm logiczny while jest czytelny. 5. Implementacja odpowiednika w C #include &lt;stdio.h&gt;int main() { int i = 0; while(i &lt; 5) { printf(&#8222;%d\\n&#8221;, i); i = i + 1; } return 0;} Semantyka identyczna: warunek przed wej\u015bciem w blok. 6. Implementacja w C++ #include &lt;iostream&gt;using namespace std;int main() { int i = 0; while(i &lt; 5) { cout &lt;&lt; i &lt;&lt; endl; i++; } return 0;} R\u00f3\u017cnice dotycz\u0105 sk\u0142adni j\u0119zyka, nie logiki. R\u00f3\u017cnica mi\u0119dzy while a for w Pythonie for: while: Zamiana konstrukcji: i = 0while i &lt; 5: print(i) i += 1 odpowiada: for i in range(5): print(i) Jednak while daje wi\u0119ksz\u0105 swobod\u0119 w sterowaniu logik\u0105. Typowe b\u0142\u0119dy i pu\u0142apki 1. Brak modyfikacji zmiennej steruj\u0105cej i = 0while i &lt; 5: print(i) P\u0119tla niesko\u0144czona. 2. Modyfikacja zmiennej w z\u0142ym miejscu przy continue while i &lt; 5: if i == 3: continue i += 1 Brak zwi\u0119kszenia przed continue \u2192 blokada. 3. Zbyt z\u0142o\u017cony warunek logiczny Warunki wielokrotne powinny by\u0107 rozpisane pomocniczo: warunek = x &gt; 0 and y &lt; 10 and z != 3while warunek: Zwi\u0119ksza czytelno\u015b\u0107. 4. Nieczytelne p\u0119tle niesko\u0144czone Lepszy wzorzec: while True: &#8230; if warunek_zakonczenia: break ni\u017c sztuczne: flaga = Truewhile flaga: Zale\u017cno\u015bci mi\u0119dzy poj\u0119ciami: p\u0119tla, warunek, zmienna steruj\u0105ca, inwariant W analizie algorytmicznej istotne s\u0105: Przyk\u0142ad: i = 0suma = 0while i &lt;= n: suma += i i += 1 Inwariant: suma zawiera sum\u0119 liczb od 0 do i-1. Analiza poprawno\u015bci algorytmu opiera si\u0119 w\u0142a\u015bnie na inwariancie. Uwagi praktyczne P\u0119tla while jest konstrukcj\u0105 prost\u0105 sk\u0142adniowo, ale bardzo siln\u0105 semantycznie. Pozwala modelowa\u0107 procesy iteracyjne, algorytmy numeryczne, przetwarzanie danych strumieniowych oraz kontrolowane p\u0119tle niesko\u0144czone. Jej poprawne u\u017cycie wymaga \u015bwiadomego kontrolowania warunku zako\u0144czenia i zmiennych steruj\u0105cych.<\/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-1143","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1143","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=1143"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1143\/revisions"}],"predecessor-version":[{"id":1144,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1143\/revisions\/1144"}],"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=1143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}