{"id":1339,"date":"2026-04-19T13:17:12","date_gmt":"2026-04-19T11:17:12","guid":{"rendered":"https:\/\/trzykody.pl\/?p=1339"},"modified":"2026-04-19T13:17:15","modified_gmt":"2026-04-19T11:17:15","slug":"python-range","status":"publish","type":"post","link":"https:\/\/trzykody.pl\/index.php\/2026\/04\/19\/python-range\/","title":{"rendered":"Python Range"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Tworzenie powtarzalnych operacji bez r\u0119cznego wpisywania kolejnych warto\u015bci to jedna z podstaw pracy w Pythonie. P\u0119tle, iteracja po indeksach, generowanie sekwencji liczb czy kontrolowanie liczby wykona\u0144 instrukcji pojawiaj\u0105 si\u0119 praktycznie w ka\u017cdym programie &#8211; od prostych skrypt\u00f3w po analiz\u0119 danych i algorytmy numeryczne. W praktyce bardzo szybko okazuje si\u0119, \u017ce r\u0119czne zarz\u0105dzanie liczbami jest niewygodne, dlatego centralnym narz\u0119dziem staje si\u0119 <strong>Python Range<\/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><a href=\"#python-range-jako-mechanizm-generowania-sekwencji-liczb-bez-tworzenia-pelnej-listy-w-pamieci\">Python Range jako mechanizm generowania sekwencji liczb bez tworzenia pe\u0142nej listy w pami\u0119ci<\/a><ol><li><a href=\"#interpretacja-parametrow-krok-po-kroku\">Interpretacja parametr\u00f3w krok po kroku<\/a><\/li><\/ol><\/li><li><a href=\"#python-range-w-petlach-for-indeksowaniu-i-sterowaniu-liczba-iteracji-programu\">Python Range w p\u0119tlach for, indeksowaniu i sterowaniu liczb\u0105 iteracji programu<\/a><ol><li><a href=\"#przyklady-kodu-w-tabeli\">Przyk\u0142ady kodu w tabeli<\/a><\/li><li><a href=\"#iteracja-po-indeksach-listy\">Iteracja po indeksach listy<\/a><\/li><li><a href=\"#kontrola-liczby-prob\">Kontrola liczby pr\u00f3b<\/a><\/li><\/ol><\/li><li><a href=\"#python-range-przy-krokach-ujemnych-konwersji-do-listy-i-sprawdzaniu-zachowania-granic-zakresu\">Python Range przy krokach ujemnych, konwersji do listy i sprawdzaniu zachowania granic zakresu<\/a><ol><li><a href=\"#krok-ujemny\">Krok ujemny<\/a><\/li><li><a href=\"#konwersja-do-listy\">Konwersja do listy<\/a><\/li><li><a href=\"#sprawdzanie-przynaleznosci\">Sprawdzanie przynale\u017cno\u015bci<\/a><\/li><li><a href=\"#wzor-logiczny-dzialania-granic\">Wz\u00f3r logiczny dzia\u0142ania granic<\/a><\/li><\/ol><\/li><li><a href=\"#roznica-miedzy-lista-a-obiektem-zakresu-i-konsekwencje-wydajnosciowe-w-wiekszych-programach\">R\u00f3\u017cnica mi\u0119dzy list\u0105 a obiektem zakresu i konsekwencje wydajno\u015bciowe w wi\u0119kszych programach<\/a><\/li><li><a href=\"#typowe-pulapki-i-bledy-ktore-regularnie-powoduja-niepoprawne-dzialanie-programu\">Typowe pu\u0142apki i b\u0142\u0119dy, kt\u00f3re regularnie powoduj\u0105 niepoprawne dzia\u0142anie programu<\/a><ol><li><a href=\"#blad-pierwszy-oczekiwanie-ze-stop-jest-wliczany\">B\u0142\u0105d pierwszy &#8211; oczekiwanie, \u017ce stop jest wliczany<\/a><\/li><li><a href=\"#blad-drugi-krok-rowny-zero\">B\u0142\u0105d drugi &#8211; krok r\u00f3wny zero<\/a><\/li><li><a href=\"#blad-trzeci-zle-granice-przy-kroku-ujemnym\">B\u0142\u0105d trzeci &#8211; z\u0142e granice przy kroku ujemnym<\/a><\/li><li><a href=\"#blad-czwarty-uzywanie-indeksow-tam-gdzie-nie-sa-potrzebne\">B\u0142\u0105d czwarty &#8211; u\u017cywanie indeks\u00f3w tam, gdzie nie s\u0105 potrzebne<\/a><\/li><\/ol><\/li><li><a href=\"#faq\">FAQ<\/a><ol><li><a href=\"#czy-range-dziala-tylko-na-liczbach-calkowitych\">Czy range() dzia\u0142a tylko na liczbach ca\u0142kowitych?<\/a><\/li><li><a href=\"#dlaczego-range-5-zaczyna-od-zera\">Dlaczego range(5) zaczyna od zera?<\/a><\/li><li><a href=\"#czy-mozna-uzywac-range-bez-petli-for\">Czy mo\u017cna u\u017cywa\u0107 range() bez p\u0119tli for?<\/a><\/li><li><a href=\"#czy-range-jest-szybsze-od-listy\">Czy range() jest szybsze od listy?<\/a><\/li><li><a href=\"#kiedy-lepiej-uzyc-enumerate-zamiast-range-len\">Kiedy lepiej u\u017cy\u0107 enumerate() zamiast range(len(&#8230;))?<\/a><\/li><li><a href=\"#czy-mozna-odwrocic-zakres-bez-kroku-ujemnego\">Czy mo\u017cna odwr\u00f3ci\u0107 zakres bez kroku ujemnego?<\/a><\/li><\/ol><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"python-range-jako-mechanizm-generowania-sekwencji-liczb-bez-tworzenia-pelnej-listy-w-pamieci\">Python Range jako mechanizm generowania sekwencji liczb bez tworzenia pe\u0142nej listy w pami\u0119ci<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Funkcja <code>range()<\/code> s\u0142u\u017cy do reprezentowania uporz\u0105dkowanego ci\u0105gu liczb ca\u0142kowitych. Najwa\u017cniejsze jest to, \u017ce nie tworzy od razu pe\u0142nej listy warto\u015bci w pami\u0119ci operacyjnej. Zwraca obiekt zakresu, kt\u00f3ry generuje liczby wtedy, gdy s\u0105 potrzebne.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To ma znaczenie praktyczne. Dla ma\u0142ych danych r\u00f3\u017cnica jest ma\u0142o widoczna, ale dla du\u017cych zakres\u00f3w \u2014 na przyk\u0142ad miliona lub stu milion\u00f3w warto\u015bci &#8211; zu\u017cycie pami\u0119ci staje si\u0119 istotne.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>lista <code>list(range(1000000))<\/code> tworzy milion element\u00f3w w RAM<\/li>\n\n\n\n<li>samo <code>range(1000000)<\/code> przechowuje tylko informacj\u0119 o pocz\u0105tku, ko\u0144cu i kroku<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">To podej\u015bcie jest wydajne i zgodne z ide\u0105 leniwej ewaluacji.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sk\u0142adnia podstawowa ma trzy warianty:<\/p>\n\n\n\n<ol 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<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Parametr <code>stop<\/code> nie jest wliczany do wyniku. To jeden z najcz\u0119stszych b\u0142\u0119d\u00f3w pocz\u0105tkuj\u0105cych.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"interpretacja-parametrow-krok-po-kroku\">Interpretacja parametr\u00f3w krok po kroku<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi zapis wygl\u0105da tak:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>range(5)<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">oznacza to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>start = 0<\/li>\n\n\n\n<li>stop = 5<\/li>\n\n\n\n<li>step = 1<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">czyli wygenerowane zostan\u0105 liczby:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">0, 1, 2, 3, 4<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nie pojawi si\u0119 liczba 5.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gdy zapis wygl\u0105da tak:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>range(2, 8)<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">otrzymujemy:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2, 3, 4, 5, 6, 7<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przy trzecim parametrze:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>range(2, 10, 2)<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">wynik to:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2, 4, 6, 8<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Krok mo\u017ce by\u0107 r\u00f3wnie\u017c ujemny.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"python-range-w-petlach-for-indeksowaniu-i-sterowaniu-liczba-iteracji-programu\">Python Range w p\u0119tlach for, indeksowaniu i sterowaniu liczb\u0105 iteracji programu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Najcz\u0119stsze u\u017cycie <code>range()<\/code> wyst\u0119puje w p\u0119tli <code>for<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Python nie u\u017cywa klasycznego modelu p\u0119tli znanego z C, gdzie zapisuje si\u0119 inicjalizacj\u0119, warunek i inkrementacj\u0119 w jednej linii. Zamiast tego iteruje si\u0119 po obiektach.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>range()<\/code> pe\u0142ni tutaj rol\u0119 kontrolera liczby powt\u00f3rze\u0144.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"przyklady-kodu-w-tabeli\">Przyk\u0142ady kodu w tabeli<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Zastosowanie<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python \u2013 pi\u0119\u0107 iteracji<\/td><td><code>for i in range(5):<\/code><br><code>print(i)<\/code><\/td><\/tr><tr><td>Python \u2013 liczby parzyste<\/td><td><code>for i in range(0, 10, 2):<\/code><br><code>print(i)<\/code><\/td><\/tr><tr><td>Python \u2013 odliczanie w d\u00f3\u0142<\/td><td><code>for i in range(10, 0, -1):<\/code><br><code>print(i)<\/code><\/td><\/tr><tr><td>C \u2013 klasyczna p\u0119tla for<\/td><td><code>#include &lt;stdio.h&gt;<\/code><br><br><code>int main() {<\/code><br><code>for(int i = 0; i &lt; 5; i++) {<\/code><br><code>printf(\"%d\\n\", i);<\/code><br><code>}<\/code><br><code>return 0;<\/code><br><code>}<\/code><\/td><\/tr><tr><td>C++ \u2013 analogiczne dzia\u0142anie<\/td><td><code>#include &lt;iostream&gt;<\/code><br><code>using namespace std;<\/code><br><br><code>int main() {<\/code><br><code>for(int i = 0; i &lt; 5; i++) {<\/code><br><code>cout &lt;&lt; i &lt;&lt; endl;<\/code><br><code>}<\/code><br><code>return 0;<\/code><br><code>}<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">W Pythonie p\u0119tla jest kr\u00f3tsza i mniej podatna na b\u0142\u0119dy zwi\u0105zane z warunkiem zako\u0144czenia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"iteracja-po-indeksach-listy\">Iteracja po indeksach listy<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Czasem potrzebny jest nie tylko element, ale r\u00f3wnie\u017c jego pozycja.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Zastosowanie<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Iteracja po indeksach<\/td><td><code>lista = [\"Ala\", \"Ola\", \"Ela\"]<\/code><br><br><code>for i in range(len(lista)):<\/code><br><code>print(i, lista[i])<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Technicznie dzia\u0142a to poprawnie, ale w praktyce cz\u0119sto lepiej u\u017cywa\u0107 <code>enumerate()<\/code>, poniewa\u017c kod jest czytelniejszy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kontrola-liczby-prob\">Kontrola liczby pr\u00f3b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dobrym zastosowaniem jest ograniczenie liczby powt\u00f3rze\u0144, na przyk\u0142ad przy logowaniu lub testach.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Zastosowanie<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Trzy pr\u00f3by logowania<\/td><td><code>for proba in range(3):<\/code><br><code>haslo = input(\"Has\u0142o: \")<\/code><br><code>if haslo == \"admin\":<\/code><br><code>print(\"Dost\u0119p przyznany\")<\/code><br><code>break<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Tutaj <code>range()<\/code> pe\u0142ni rol\u0119 licznika kontrolnego.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"python-range-przy-krokach-ujemnych-konwersji-do-listy-i-sprawdzaniu-zachowania-granic-zakresu\">Python Range przy krokach ujemnych, konwersji do listy i sprawdzaniu zachowania granic zakresu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Najwi\u0119cej nieporozumie\u0144 pojawia si\u0119 przy granicach zakresu oraz kroku ujemnym.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"krok-ujemny\">Krok ujemny<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi chcemy schodzi\u0107 w d\u00f3\u0142:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Zastosowanie<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Od 10 do 1<\/td><td><code>for i in range(10, 0, -1):<\/code><br><code>print(i)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wynik:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">10, 9, 8, 7, 6, 5, 4, 3, 2, 1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi krok jest ujemny, warto\u015b\u0107 pocz\u0105tkowa musi by\u0107 wi\u0119ksza od ko\u0144cowej. W przeciwnym razie zakres b\u0119dzie pusty.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad b\u0142\u0119dny:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Zastosowanie<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Pusty zakres<\/td><td><code>range(1, 10, -1)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Tutaj nic si\u0119 nie wykona.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"konwersja-do-listy\">Konwersja do listy<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Obiekt zakresu mo\u017cna zamieni\u0107 na list\u0119:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Zastosowanie<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Konwersja<\/td><td><code>print(list(range(5)))<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wynik:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>[0, 1, 2, 3, 4]<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To przydaje si\u0119 podczas debugowania, gdy chcemy zobaczy\u0107 dok\u0142adne warto\u015bci.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"sprawdzanie-przynaleznosci\">Sprawdzanie przynale\u017cno\u015bci<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mo\u017cna te\u017c sprawdza\u0107, czy liczba nale\u017cy do zakresu.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Zastosowanie<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Operator in<\/td><td><code>print(4 in range(10))<\/code><br><code>print(15 in range(10))<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Python robi to wydajnie, bez rozwijania ca\u0142ej sekwencji.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"wzor-logiczny-dzialania-granic\">Wz\u00f3r logiczny dzia\u0142ania granic<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Opis<\/th><th>Zapis<\/th><\/tr><\/thead><tbody><tr><td>Zakres dodatni<\/td><td><code>start &lt;= x &lt; stop<\/code><\/td><\/tr><tr><td>Zakres ujemny<\/td><td><code>start &gt;= x &gt; stop<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To prosty model, kt\u00f3ry pomaga unikn\u0105\u0107 b\u0142\u0119d\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"roznica-miedzy-lista-a-obiektem-zakresu-i-konsekwencje-wydajnosciowe-w-wiekszych-programach\">R\u00f3\u017cnica mi\u0119dzy list\u0105 a obiektem zakresu i konsekwencje wydajno\u015bciowe w wi\u0119kszych programach<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Por\u00f3wnanie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Cecha<\/th><th><code>range()<\/code><\/th><th><code>list()<\/code><\/th><\/tr><\/thead><tbody><tr><td>Zu\u017cycie pami\u0119ci<\/td><td>bardzo ma\u0142e<\/td><td>ro\u015bnie wraz z liczb\u0105 element\u00f3w<\/td><\/tr><tr><td>Mo\u017cliwo\u015b\u0107 modyfikacji<\/td><td>nie<\/td><td>tak<\/td><\/tr><tr><td>Generowanie warto\u015bci<\/td><td>leniwe<\/td><td>natychmiastowe<\/td><\/tr><tr><td>Typowe u\u017cycie<\/td><td>p\u0119tle, iteracja<\/td><td>przechowywanie danych<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Dla programu analizuj\u0105cego milion rekord\u00f3w r\u00f3\u017cnica nie jest kosmetyczna. Z\u0142a decyzja mo\u017ce oznacza\u0107 wolniejsze dzia\u0142anie i wi\u0119ksze zu\u017cycie RAM.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cz\u0119sty b\u0142\u0105d praktyczny wygl\u0105da tak:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Problem<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Niepotrzebna lista<\/td><td><code>for i in list(range(1000000)):<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Lista jest tutaj zb\u0119dna. Wystarczy:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Poprawnie<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Bez straty pami\u0119ci<\/td><td><code>for i in range(1000000):<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"typowe-pulapki-i-bledy-ktore-regularnie-powoduja-niepoprawne-dzialanie-programu\">Typowe pu\u0142apki i b\u0142\u0119dy, kt\u00f3re regularnie powoduj\u0105 niepoprawne dzia\u0142anie programu<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"blad-pierwszy-oczekiwanie-ze-stop-jest-wliczany\">B\u0142\u0105d pierwszy &#8211; oczekiwanie, \u017ce stop jest wliczany<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Programista zak\u0142ada:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>range(1, 5)<\/code> \u2192 1,2,3,4,5<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rzeczywisto\u015b\u0107:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1,2,3,4<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To bardzo cz\u0119sty problem przy zadaniach egzaminacyjnych i algorytmicznych.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"blad-drugi-krok-rowny-zero\">B\u0142\u0105d drugi &#8211; krok r\u00f3wny zero<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Taki zapis:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Problem<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Niedozwolony krok<\/td><td><code>range(1, 10, 0)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">powoduje wyj\u0105tek:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>ValueError<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Krok nigdy nie mo\u017ce by\u0107 zerowy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"blad-trzeci-zle-granice-przy-kroku-ujemnym\">B\u0142\u0105d trzeci &#8211; z\u0142e granice przy kroku ujemnym<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi zakres nie zgadza si\u0119 logicznie z kierunkiem kroku, p\u0119tla nie wykona si\u0119 ani razu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"blad-czwarty-uzywanie-indeksow-tam-gdzie-nie-sa-potrzebne\">B\u0142\u0105d czwarty &#8211; u\u017cywanie indeks\u00f3w tam, gdzie nie s\u0105 potrzebne<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Zamiast:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Mniej czytelnie<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Indeksy niepotrzbne<\/td><td><code>for i in range(len(lista)):<\/code><br><code>print(lista[i])<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">cz\u0119sto lepiej:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Czytelniej<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Iteracja bez indeks\u00f3w<\/td><td><code>for element in lista:<\/code><br><code>print(element)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To zmniejsza ryzyko b\u0142\u0119d\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-range-dziala-tylko-na-liczbach-calkowitych\">Czy <code>range()<\/code> dzia\u0142a tylko na liczbach ca\u0142kowitych?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tak. Obs\u0142uguje liczby ca\u0142kowite. Dla warto\u015bci zmiennoprzecinkowych stosuje si\u0119 zwykle p\u0119tle oparte na innych mechanizmach lub biblioteki takie jak NumPy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"dlaczego-range-5-zaczyna-od-zera\">Dlaczego <code>range(5)<\/code> zaczyna od zera?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To zgodne z logik\u0105 indeksowania w Pythonie, gdzie pierwsza pozycja ma indeks 0. Dzi\u0119ki temu \u0142atwiej \u0142\u0105czy\u0107 iteracj\u0119 z prac\u0105 na listach i tablicach.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-mozna-uzywac-range-bez-petli-for\">Czy mo\u017cna u\u017cywa\u0107 <code>range()<\/code> bez p\u0119tli <code>for<\/code>?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tak. Mo\u017cna sprawdza\u0107 przynale\u017cno\u015b\u0107, konwertowa\u0107 do listy, u\u017cywa\u0107 w instrukcjach warunkowych lub przekazywa\u0107 dalej jako obiekt iterowalny.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-range-jest-szybsze-od-listy\">Czy <code>range()<\/code> jest szybsze od listy?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">W wi\u0119kszo\u015bci zastosowa\u0144 tak, szczeg\u00f3lnie dla du\u017cych zakres\u00f3w. Nie chodzi tylko o szybko\u015b\u0107, ale g\u0142\u00f3wnie o oszcz\u0119dno\u015b\u0107 pami\u0119ci.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kiedy-lepiej-uzyc-enumerate-zamiast-range-len\">Kiedy lepiej u\u017cy\u0107 <code>enumerate()<\/code> zamiast <code>range(len(...))<\/code>?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Gdy potrzebny jest indeks i element jednocze\u015bnie. Kod jest wtedy prostszy i bardziej odporny na pomy\u0142ki.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-mozna-odwrocic-zakres-bez-kroku-ujemnego\">Czy mo\u017cna odwr\u00f3ci\u0107 zakres bez kroku ujemnego?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mo\u017cna u\u017cy\u0107 <code>reversed(range(...))<\/code>, ale w wielu przypadkach prostsze i bardziej czytelne jest jawne podanie ujemnego kroku.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>range()<\/code> jest jednym z tych narz\u0119dzi, kt\u00f3re wygl\u0105daj\u0105 banalnie tylko na pocz\u0105tku. W praktyce od poprawnego zrozumienia granic, kroku i sposobu dzia\u0142ania zale\u017cy poprawno\u015b\u0107 wielu p\u0119tli, algorytm\u00f3w i operacji na danych. To drobny mechanizm, ale bardzo cz\u0119sto w\u0142a\u015bnie na takich drobiazgach program dzia\u0142a dobrze albo traci godziny na debugowanie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>\u0179r\u00f3d\u0142o Foto: Freepik<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tworzenie powtarzalnych operacji bez r\u0119cznego wpisywania kolejnych warto\u015bci to jedna z podstaw pracy w Pythonie. P\u0119tle, iteracja po indeksach, generowanie sekwencji liczb czy kontrolowanie liczby wykona\u0144 instrukcji pojawiaj\u0105 si\u0119 praktycznie w ka\u017cdym programie &#8211; od prostych skrypt\u00f3w po analiz\u0119 danych i algorytmy numeryczne. W praktyce bardzo szybko okazuje si\u0119, \u017ce r\u0119czne zarz\u0105dzanie liczbami jest niewygodne, dlatego centralnym narz\u0119dziem staje si\u0119 Python Range. Python Range jako mechanizm generowania sekwencji liczb bez tworzenia pe\u0142nej listy w pami\u0119ci Funkcja range() s\u0142u\u017cy do reprezentowania uporz\u0105dkowanego ci\u0105gu liczb ca\u0142kowitych. Najwa\u017cniejsze jest to, \u017ce nie tworzy od razu pe\u0142nej listy warto\u015bci w pami\u0119ci operacyjnej. Zwraca obiekt zakresu, kt\u00f3ry generuje liczby wtedy, gdy s\u0105 potrzebne. To ma znaczenie praktyczne. Dla ma\u0142ych danych r\u00f3\u017cnica jest ma\u0142o widoczna, ale dla du\u017cych zakres\u00f3w \u2014 na przyk\u0142ad miliona lub stu milion\u00f3w warto\u015bci &#8211; zu\u017cycie pami\u0119ci staje si\u0119 istotne. Przyk\u0142ad: To podej\u015bcie jest wydajne i zgodne z ide\u0105 leniwej ewaluacji. Sk\u0142adnia podstawowa ma trzy warianty: Parametr stop nie jest wliczany do wyniku. To jeden z najcz\u0119stszych b\u0142\u0119d\u00f3w pocz\u0105tkuj\u0105cych. Interpretacja parametr\u00f3w krok po kroku Je\u017celi zapis wygl\u0105da tak: range(5) oznacza to: czyli wygenerowane zostan\u0105 liczby: 0, 1, 2, 3, 4 Nie pojawi si\u0119 liczba 5. Gdy zapis wygl\u0105da tak: range(2, 8) otrzymujemy: 2, 3, 4, 5, 6, 7 Przy trzecim parametrze: range(2, 10, 2) wynik to: 2, 4, 6, 8 Krok mo\u017ce by\u0107 r\u00f3wnie\u017c ujemny. Python Range w p\u0119tlach for, indeksowaniu i sterowaniu liczb\u0105 iteracji programu Najcz\u0119stsze u\u017cycie range() wyst\u0119puje w p\u0119tli for. Python nie u\u017cywa klasycznego modelu p\u0119tli znanego z C, gdzie zapisuje si\u0119 inicjalizacj\u0119, warunek i inkrementacj\u0119 w jednej linii. Zamiast tego iteruje si\u0119 po obiektach. range() pe\u0142ni tutaj rol\u0119 kontrolera liczby powt\u00f3rze\u0144. Przyk\u0142ady kodu w tabeli Zastosowanie Kod Python \u2013 pi\u0119\u0107 iteracji for i in range(5):print(i) Python \u2013 liczby parzyste for i in range(0, 10, 2):print(i) Python \u2013 odliczanie w d\u00f3\u0142 for i in range(10, 0, -1):print(i) C \u2013 klasyczna p\u0119tla for #include &lt;stdio.h&gt; int main() {for(int i = 0; i &lt; 5; i++) {printf(&#8222;%d\\n&#8221;, i);}return 0;} C++ \u2013 analogiczne dzia\u0142anie #include &lt;iostream&gt;using namespace std; int main() {for(int i = 0; i &lt; 5; i++) {cout &lt;&lt; i &lt;&lt; endl;}return 0;} W Pythonie p\u0119tla jest kr\u00f3tsza i mniej podatna na b\u0142\u0119dy zwi\u0105zane z warunkiem zako\u0144czenia. Iteracja po indeksach listy Czasem potrzebny jest nie tylko element, ale r\u00f3wnie\u017c jego pozycja. Przyk\u0142ad: Zastosowanie Kod Iteracja po indeksach lista = [&#8222;Ala&#8221;, &#8222;Ola&#8221;, &#8222;Ela&#8221;] for i in range(len(lista)):print(i, lista[i]) Technicznie dzia\u0142a to poprawnie, ale w praktyce cz\u0119sto lepiej u\u017cywa\u0107 enumerate(), poniewa\u017c kod jest czytelniejszy. Kontrola liczby pr\u00f3b Dobrym zastosowaniem jest ograniczenie liczby powt\u00f3rze\u0144, na przyk\u0142ad przy logowaniu lub testach. Zastosowanie Kod Trzy pr\u00f3by logowania for proba in range(3):haslo = input(&#8222;Has\u0142o: &#8222;)if haslo == &#8222;admin&#8221;:print(&#8222;Dost\u0119p przyznany&#8221;)break Tutaj range() pe\u0142ni rol\u0119 licznika kontrolnego. Python Range przy krokach ujemnych, konwersji do listy i sprawdzaniu zachowania granic zakresu Najwi\u0119cej nieporozumie\u0144 pojawia si\u0119 przy granicach zakresu oraz kroku ujemnym. Krok ujemny Je\u017celi chcemy schodzi\u0107 w d\u00f3\u0142: Zastosowanie Kod Od 10 do 1 for i in range(10, 0, -1):print(i) Wynik: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 Je\u017celi krok jest ujemny, warto\u015b\u0107 pocz\u0105tkowa musi by\u0107 wi\u0119ksza od ko\u0144cowej. W przeciwnym razie zakres b\u0119dzie pusty. Przyk\u0142ad b\u0142\u0119dny: Zastosowanie Kod Pusty zakres range(1, 10, -1) Tutaj nic si\u0119 nie wykona. Konwersja do listy Obiekt zakresu mo\u017cna zamieni\u0107 na list\u0119: Zastosowanie Kod Konwersja print(list(range(5))) Wynik: [0, 1, 2, 3, 4] To przydaje si\u0119 podczas debugowania, gdy chcemy zobaczy\u0107 dok\u0142adne warto\u015bci. Sprawdzanie przynale\u017cno\u015bci Mo\u017cna te\u017c sprawdza\u0107, czy liczba nale\u017cy do zakresu. Zastosowanie Kod Operator in print(4 in range(10))print(15 in range(10)) Python robi to wydajnie, bez rozwijania ca\u0142ej sekwencji. Wz\u00f3r logiczny dzia\u0142ania granic Opis Zapis Zakres dodatni start &lt;= x &lt; stop Zakres ujemny start &gt;= x &gt; stop To prosty model, kt\u00f3ry pomaga unikn\u0105\u0107 b\u0142\u0119d\u00f3w. R\u00f3\u017cnica mi\u0119dzy list\u0105 a obiektem zakresu i konsekwencje wydajno\u015bciowe w wi\u0119kszych programach Por\u00f3wnanie: Cecha range() list() Zu\u017cycie pami\u0119ci bardzo ma\u0142e ro\u015bnie wraz z liczb\u0105 element\u00f3w Mo\u017cliwo\u015b\u0107 modyfikacji nie tak Generowanie warto\u015bci leniwe natychmiastowe Typowe u\u017cycie p\u0119tle, iteracja przechowywanie danych Dla programu analizuj\u0105cego milion rekord\u00f3w r\u00f3\u017cnica nie jest kosmetyczna. Z\u0142a decyzja mo\u017ce oznacza\u0107 wolniejsze dzia\u0142anie i wi\u0119ksze zu\u017cycie RAM. Cz\u0119sty b\u0142\u0105d praktyczny wygl\u0105da tak: Problem Kod Niepotrzebna lista for i in list(range(1000000)): Lista jest tutaj zb\u0119dna. Wystarczy: Poprawnie Kod Bez straty pami\u0119ci for i in range(1000000): Typowe pu\u0142apki i b\u0142\u0119dy, kt\u00f3re regularnie powoduj\u0105 niepoprawne dzia\u0142anie programu B\u0142\u0105d pierwszy &#8211; oczekiwanie, \u017ce stop jest wliczany Programista zak\u0142ada: range(1, 5) \u2192 1,2,3,4,5 Rzeczywisto\u015b\u0107: 1,2,3,4 To bardzo cz\u0119sty problem przy zadaniach egzaminacyjnych i algorytmicznych. B\u0142\u0105d drugi &#8211; krok r\u00f3wny zero Taki zapis: Problem Kod Niedozwolony krok range(1, 10, 0) powoduje wyj\u0105tek: ValueError Krok nigdy nie mo\u017ce by\u0107 zerowy. B\u0142\u0105d trzeci &#8211; z\u0142e granice przy kroku ujemnym Je\u017celi zakres nie zgadza si\u0119 logicznie z kierunkiem kroku, p\u0119tla nie wykona si\u0119 ani razu. B\u0142\u0105d czwarty &#8211; u\u017cywanie indeks\u00f3w tam, gdzie nie s\u0105 potrzebne Zamiast: Mniej czytelnie Kod Indeksy niepotrzbne for i in range(len(lista)):print(lista[i]) cz\u0119sto lepiej: Czytelniej Kod Iteracja bez indeks\u00f3w for element in lista:print(element) To zmniejsza ryzyko b\u0142\u0119d\u00f3w. FAQ Czy range() dzia\u0142a tylko na liczbach ca\u0142kowitych? Tak. Obs\u0142uguje liczby ca\u0142kowite. Dla warto\u015bci zmiennoprzecinkowych stosuje si\u0119 zwykle p\u0119tle oparte na innych mechanizmach lub biblioteki takie jak NumPy. Dlaczego range(5) zaczyna od zera? To zgodne z logik\u0105 indeksowania w Pythonie, gdzie pierwsza pozycja ma indeks 0. Dzi\u0119ki temu \u0142atwiej \u0142\u0105czy\u0107 iteracj\u0119 z prac\u0105 na listach i tablicach. Czy mo\u017cna u\u017cywa\u0107 range() bez p\u0119tli for? Tak. Mo\u017cna sprawdza\u0107 przynale\u017cno\u015b\u0107, konwertowa\u0107 do listy, u\u017cywa\u0107 w instrukcjach warunkowych lub przekazywa\u0107 dalej jako obiekt iterowalny. Czy range() jest szybsze od listy? W wi\u0119kszo\u015bci zastosowa\u0144 tak, szczeg\u00f3lnie dla du\u017cych zakres\u00f3w. Nie chodzi tylko o szybko\u015b\u0107, ale g\u0142\u00f3wnie o oszcz\u0119dno\u015b\u0107 pami\u0119ci. Kiedy lepiej u\u017cy\u0107 enumerate() zamiast range(len(&#8230;))? Gdy potrzebny jest indeks i element jednocze\u015bnie. Kod jest wtedy prostszy i bardziej odporny na pomy\u0142ki. Czy mo\u017cna odwr\u00f3ci\u0107 zakres bez kroku ujemnego? Mo\u017cna u\u017cy\u0107 reversed(range(&#8230;)), ale w wielu przypadkach prostsze i bardziej czytelne jest jawne podanie ujemnego kroku. range() jest jednym z tych narz\u0119dzi, kt\u00f3re wygl\u0105daj\u0105 banalnie tylko na pocz\u0105tku. W praktyce od poprawnego zrozumienia granic, kroku i sposobu dzia\u0142ania zale\u017cy poprawno\u015b\u0107 wielu p\u0119tli, algorytm\u00f3w i operacji na danych. To drobny mechanizm, ale bardzo cz\u0119sto w\u0142a\u015bnie na takich drobiazgach program dzia\u0142a dobrze albo traci godziny na debugowanie. \u0179r\u00f3d\u0142o Foto: Freepik<\/p>\n","protected":false},"author":1,"featured_media":1340,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[],"class_list":["post-1339","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jezyk-programowania"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1339","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"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=1339"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1339\/revisions"}],"predecessor-version":[{"id":1341,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1339\/revisions\/1341"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media\/1340"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/categories?post=1339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/tags?post=1339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}