{"id":1581,"date":"2026-05-19T13:56:52","date_gmt":"2026-05-19T11:56:52","guid":{"rendered":"https:\/\/trzykody.pl\/?p=1581"},"modified":"2026-05-19T13:56:55","modified_gmt":"2026-05-19T11:56:55","slug":"python-kurs-narzedzie-do-automatyzacji-analizy-danych-i-budowy-prostych-systemow-uzytkowych","status":"publish","type":"post","link":"https:\/\/trzykody.pl\/index.php\/2026\/05\/19\/python-kurs-narzedzie-do-automatyzacji-analizy-danych-i-budowy-prostych-systemow-uzytkowych\/","title":{"rendered":"Python kurs: narz\u0119dzie do automatyzacji, analizy danych i budowy prostych system\u00f3w u\u017cytkowych"},"content":{"rendered":"\n<p>Python powsta\u0142 na pocz\u0105tku lat 90. jako j\u0119zyk maj\u0105cy upro\u015bci\u0107 tworzenie oprogramowania bez konieczno\u015bci pisania du\u017cej ilo\u015bci kodu niskopoziomowego. Dzisiaj u\u017cywa si\u0119 go do analizy danych, automatyzacji pracy biurowej, system\u00f3w backendowych, oblicze\u0144 naukowych, sztucznej inteligencji i prostych narz\u0119dzi administracyjnych. W praktyce wiele os\u00f3b zaczyna nauk\u0119 od skrypt\u00f3w automatyzuj\u0105cych nudne zadania: zmiany nazw plik\u00f3w, przetwarzania CSV, pobierania danych z API albo generowania raport\u00f3w. W\u0142a\u015bnie dlatego <strong><a href=\"https:\/\/trzykody.pl\/index.php\/2026\/04\/20\/slownik-python\/\">Python kurs<\/a><\/strong> cz\u0119sto pojawia si\u0119 jako pierwszy kontakt z programowaniem u administrator\u00f3w, analityk\u00f3w i student\u00f3w kierunk\u00f3w technicznych.<\/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-kurs-i-zrozumienie-roznicy-miedzy-interpreterem-skladnia-oraz-modelem-wykonywania-programu\">Python kurs i zrozumienie r\u00f3\u017cnicy mi\u0119dzy interpreterem, sk\u0142adni\u0105 oraz modelem wykonywania programu<\/a><\/li><li><a href=\"#typy-danych-zmienne-i-sposob-przechowywania-informacji-w-pamieci-operacyjnej\">Typy danych, zmienne i spos\u00f3b przechowywania informacji w pami\u0119ci operacyjnej<\/a><\/li><li><a href=\"#python-kurs-i-praktyczne-wykorzystanie-instrukcji-warunkowych-petli-oraz-funkcji-podczas-budowy-prostych-narzedzi\">Python kurs i praktyczne wykorzystanie instrukcji warunkowych, p\u0119tli oraz funkcji podczas budowy prostych narz\u0119dzi<\/a><\/li><li><a href=\"#struktury-danych-i-algorytmy-potrzebne-do-wydajnego-przetwarzania-wiekszych-zbiorow-informacji\">Struktury danych i algorytmy potrzebne do wydajnego przetwarzania wi\u0119kszych zbior\u00f3w informacji<\/a><\/li><li><a href=\"#operacje-na-plikach-obsluga-wyjatkow-oraz-zabezpieczanie-programu-przed-utrata-danych\">Operacje na plikach, obs\u0142uga wyj\u0105tk\u00f3w oraz zabezpieczanie programu przed utrat\u0105 danych<\/a><\/li><li><a href=\"#python-kurs-i-zaleznosc-miedzy-bibliotekami-standardowymi-modulami-zewnetrznymi-oraz-srodowiskiem-uruchomieniowym\">Python kurs i zale\u017cno\u015b\u0107 mi\u0119dzy bibliotekami standardowymi, modu\u0142ami zewn\u0119trznymi oraz \u015brodowiskiem uruchomieniowym<\/a><\/li><li><a href=\"#analiza-zlozonosci-obliczeniowej-i-wplyw-algorytmow-na-zuzycie-procesora-oraz-pamieci-ram\">Analiza z\u0142o\u017cono\u015bci obliczeniowej i wp\u0142yw algorytm\u00f3w na zu\u017cycie procesora oraz pami\u0119ci RAM<\/a><\/li><li><a href=\"#praca-z-danymi-tekstowymi-kodowaniem-utf-8-oraz-problemami-wystepujacymi-podczas-przetwarzania-znakow\">Praca z danymi tekstowymi, kodowaniem UTF-8 oraz problemami wyst\u0119puj\u0105cymi podczas przetwarzania znak\u00f3w<\/a><\/li><li><a href=\"#najczestsze-bledy-poczatkujacych-programistow-oraz-sytuacje-powodujace-trudne-do-wykrycia-problemy\">Najcz\u0119stsze b\u0142\u0119dy pocz\u0105tkuj\u0105cych programist\u00f3w oraz sytuacje powoduj\u0105ce trudne do wykrycia problemy<\/a><\/li><li><a href=\"#faq-dotyczace-nauki-pythona-praktyki-programistycznej-i-budowy-pierwszych-projektow\">FAQ dotycz\u0105ce nauki Pythona, praktyki programistycznej i budowy pierwszych projekt\u00f3w<\/a><ol><li><a href=\"#czy-python-nadaje-sie-do-duzych-projektow-produkcyjnych\">Czy Python nadaje si\u0119 do du\u017cych projekt\u00f3w produkcyjnych?<\/a><\/li><li><a href=\"#czy-warto-uczyc-sie-pythona-przed-c-lub-c\">Czy warto uczy\u0107 si\u0119 Pythona przed C lub C++?<\/a><\/li><li><a href=\"#ile-czasu-potrzeba-na-opanowanie-podstaw\">Ile czasu potrzeba na opanowanie podstaw?<\/a><\/li><li><a href=\"#dlaczego-program-dziala-na-jednym-komputerze-a-na-drugim-nie\">Dlaczego program dzia\u0142a na jednym komputerze, a na drugim nie?<\/a><\/li><li><a href=\"#czy-python-jest-wolny\">Czy Python jest wolny?<\/a><\/li><li><a href=\"#czy-trzeba-znac-matematyke\">Czy trzeba zna\u0107 matematyk\u0119?<\/a><\/li><li><a href=\"#czy-warto-pisac-wlasne-projekty-podczas-nauki\">Czy warto pisa\u0107 w\u0142asne projekty podczas nauki?<\/a><\/li><\/ol><\/li><li><a href=\"#koncowe-uwagi-dotyczace-praktycznej-nauki-programowania-i-rozwijania-poprawnych-nawykow-podczas-pracy-z-kodem\">Ko\u0144cowe uwagi dotycz\u0105ce praktycznej nauki programowania i rozwijania poprawnych nawyk\u00f3w podczas pracy z kodem<\/a><\/li><\/ol><\/nav><\/div>\n\n\n\n<p>Python jest j\u0119zykiem interpretowanym. Kod wykonywany jest linia po linii przez interpreter, bez klasycznej kompilacji do pliku wykonywalnego. To upraszcza testowanie i przyspiesza prac\u0119 podczas nauki. Jednocze\u015bnie trzeba rozumie\u0107, \u017ce wygoda okupiona jest pewnymi kosztami wydajno\u015bciowymi. Operacje wykonywane w Pythonie s\u0105 zwykle wolniejsze ni\u017c w <a href=\"https:\/\/trzykody.pl\/index.php\/c\/\">C<\/a> lub <a href=\"https:\/\/trzykody.pl\/index.php\/c-2\/\">C++<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"python-kurs-i-zrozumienie-roznicy-miedzy-interpreterem-skladnia-oraz-modelem-wykonywania-programu\">Python kurs i zrozumienie r\u00f3\u017cnicy mi\u0119dzy interpreterem, sk\u0142adni\u0105 oraz modelem wykonywania programu<\/h2>\n\n\n\n<p>W wielu materia\u0142ach pocz\u0105tkuj\u0105cy dostaje gotowe fragmenty kodu bez wyja\u015bnienia, co dzieje si\u0119 pod spodem. To p\u00f3\u017aniej prowadzi do sytuacji, w kt\u00f3rej kto\u015b umie przepisa\u0107 przyk\u0142ad, ale nie rozumie b\u0142\u0119d\u00f3w wykonania.<\/p>\n\n\n\n<p>Interpreter Pythona wykonuje instrukcje kolejno. Program mo\u017ce by\u0107 uruchomiony jako:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>pojedynczy plik <code>.py<\/code><\/li>\n\n\n\n<li>modu\u0142<\/li>\n\n\n\n<li>pakiet<\/li>\n\n\n\n<li>kod interaktywny w terminalu<\/li>\n\n\n\n<li>notebook Jupyter<\/li>\n<\/ul>\n\n\n\n<p>Najprostszy program wygl\u0105da tak:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>python\\nprint(\\\"Hello\\\")\\n<\/code><\/td><\/tr><tr><td>C<\/td><td><code>c\\n#include &lt;stdio.h&gt;\\n\\nint main() {\\n printf(\\\"Hello\\\\n\\\");\\n return 0;\\n}\\n<\/code><\/td><\/tr><tr><td>C++<\/td><td><code>cpp\\n#include &lt;iostream&gt;\\n\\nint main() {\\n std::cout &lt;&lt; \\\"Hello\\\" &lt;&lt; std::endl;\\n return 0;\\n}\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Ju\u017c tutaj wida\u0107 podstawow\u0105 r\u00f3\u017cnic\u0119. Python ukrywa wiele element\u00f3w technicznych:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>zarz\u0105dzanie pami\u0119ci\u0105<\/li>\n\n\n\n<li>definicj\u0119 funkcji g\u0142\u00f3wnej<\/li>\n\n\n\n<li>nag\u0142\u00f3wki bibliotek<\/li>\n\n\n\n<li>typy zmiennych<\/li>\n<\/ul>\n\n\n\n<p>To przyspiesza prac\u0119, ale mo\u017ce utrudni\u0107 zrozumienie dzia\u0142ania komputera.<\/p>\n\n\n\n<p>W Pythonie bardzo wa\u017cne s\u0105 wci\u0119cia. Nie s\u0105 tylko kwesti\u0105 estetyki. Okre\u015blaj\u0105 struktur\u0119 programu.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Poprawny kod<\/th><th>Niepoprawny kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nif 5 &gt; 2:\\n print(\\\"OK\\\")\\n<\/code><\/td><td><code>python\\nif 5 &gt; 2:\\nprint(\\\"OK\\\")\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>B\u0142\u0105d wci\u0119cia ko\u0144czy si\u0119 wyj\u0105tkiem <code>IndentationError<\/code>.<\/p>\n\n\n\n<p>Model wykonywania programu mo\u017cna upro\u015bci\u0107 do kilku etap\u00f3w:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Odczyt pliku \u017ar\u00f3d\u0142owego<\/li>\n\n\n\n<li>Analiza sk\u0142adni<\/li>\n\n\n\n<li>Generacja bytecode<\/li>\n\n\n\n<li>Wykonanie przez maszyn\u0119 wirtualn\u0105 Pythona<\/li>\n<\/ol>\n\n\n\n<p>To wa\u017cne przy analizie wydajno\u015bci. Programista cz\u0119sto zak\u0142ada, \u017ce kod dzia\u0142a \u201ebezpo\u015brednio na procesorze\u201d, co w Pythonie nie jest prawd\u0105.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"typy-danych-zmienne-i-sposob-przechowywania-informacji-w-pamieci-operacyjnej\">Typy danych, zmienne i spos\u00f3b przechowywania informacji w pami\u0119ci operacyjnej<\/h2>\n\n\n\n<p>W Pythonie wszystko jest obiektem. Nawet liczby ca\u0142kowite maj\u0105 w\u0142asne metody i reprezentacj\u0119 wewn\u0119trzn\u0105.<\/p>\n\n\n\n<p>Podstawowe typy:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Typ<\/th><th>Opis<\/th><th>Przyk\u0142ad<\/th><\/tr><\/thead><tbody><tr><td>int<\/td><td>liczby ca\u0142kowite<\/td><td><code>10<\/code><\/td><\/tr><tr><td>float<\/td><td>liczby zmiennoprzecinkowe<\/td><td><code>3.14<\/code><\/td><\/tr><tr><td>str<\/td><td>tekst<\/td><td><code>\"abc\"<\/code><\/td><\/tr><tr><td>bool<\/td><td>warto\u015bci logiczne<\/td><td><code>True<\/code><\/td><\/tr><tr><td>list<\/td><td>lista<\/td><td><code>[1,2,3]<\/code><\/td><\/tr><tr><td>tuple<\/td><td>krotka<\/td><td><code>(1,2)<\/code><\/td><\/tr><tr><td>dict<\/td><td>s\u0142ownik<\/td><td><code>{\\\"a\\\":1}<\/code><\/td><\/tr><tr><td>set<\/td><td>zbi\u00f3r<\/td><td><code>{1,2,3}<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Przyk\u0142ad deklaracji:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>python\\nx = 10\\nname = \\\"Jan\\\"\\nactive = True\\n<\/code><\/td><\/tr><tr><td>C<\/td><td><code>c\\nint x = 10;\\nchar name[] = \\\"Jan\\\";\\nint active = 1;\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Python sam okre\u015bla typ zmiennej. Mechanizm ten nazywa si\u0119 dynamicznym typowaniem.<\/p>\n\n\n\n<p>To wygodne, ale generuje pu\u0142apki.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><th>Efekt<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nx = 5\\nx = \\\"tekst\\\"\\n<\/code><\/td><td>Zmienna zmienia typ w trakcie dzia\u0142ania programu<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>W wi\u0119kszych projektach takie sytuacje prowadz\u0105 do trudnych b\u0142\u0119d\u00f3w logicznych.<\/p>\n\n\n\n<p>Istotna jest te\u017c r\u00f3\u017cnica mi\u0119dzy kopiowaniem warto\u015bci a kopiowaniem referencji.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td><code>python\\na = [1,2]\\nb = a\\nb.append(3)\\nprint(a)\\n<\/code><\/td><td><code>[1,2,3]<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Obie zmienne wskazuj\u0105 na ten sam obiekt w pami\u0119ci.<\/p>\n\n\n\n<p>Poprawne kopiowanie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nimport copy\\n\\na = [1,2]\\nb = copy.deepcopy(a)\\n<\/code><\/td><td>Niezale\u017cne obiekty<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>W praktyce wiele b\u0142\u0119d\u00f3w w Pythonie wynika w\u0142a\u015bnie z niezrozumienia mutowalno\u015bci obiekt\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"python-kurs-i-praktyczne-wykorzystanie-instrukcji-warunkowych-petli-oraz-funkcji-podczas-budowy-prostych-narzedzi\">Python kurs i praktyczne wykorzystanie instrukcji warunkowych, p\u0119tli oraz funkcji podczas budowy prostych narz\u0119dzi<\/h2>\n\n\n\n<p>Program bez sterowania przep\u0142ywem praktycznie nie ma warto\u015bci u\u017cytkowej.<\/p>\n\n\n\n<p>Instrukcje warunkowe:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><th>Dzia\u0142anie<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nx = 10\\n\\nif x &gt; 5:\\n print(\\\"du\u017ca liczba\\\")\\nelse:\\n print(\\\"ma\u0142a liczba\\\")\\n<\/code><\/td><td>Sprawdzenie warunku<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Zagnie\u017cd\u017cone warunki szybko staj\u0105 si\u0119 nieczytelne.<\/p>\n\n\n\n<p>Z\u0142y przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nif x &gt; 0:\\n if x &lt; 100:\\n if x % 2 == 0:\\n print(\\\"OK\\\")\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Lepsze rozwi\u0105zanie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nif 0 &lt; x &lt; 100 and x % 2 == 0:\\n print(\\\"OK\\\")\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>P\u0119tle:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Rodzaj<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>for<\/td><td><code>python\\nfor i in range(5):\\n print(i)\\n<\/code><\/td><\/tr><tr><td>while<\/td><td><code>python\\nx = 0\\nwhile x &lt; 5:\\n print(x)\\n x += 1\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>P\u0119tla <code>while<\/code> jest bardziej niebezpieczna. \u0141atwo stworzy\u0107 p\u0119tl\u0119 niesko\u0144czon\u0105.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nwhile True:\\n print(\\\"dzia\u0142a\\\")\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Funkcje pozwalaj\u0105 dzieli\u0107 kod na logiczne cz\u0119\u015bci.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\ndef suma(a, b):\\n return a + b\\n\\nwynik = suma(2, 3)\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>W praktyce dobra funkcja powinna:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>wykonywa\u0107 jedno zadanie<\/li>\n\n\n\n<li>mie\u0107 czytelne argumenty<\/li>\n\n\n\n<li>zwraca\u0107 przewidywalny wynik<\/li>\n\n\n\n<li>nie modyfikowa\u0107 globalnego stanu bez potrzeby<\/li>\n<\/ul>\n\n\n\n<p>Cz\u0119sty problem pocz\u0105tkuj\u0105cych to nadu\u017cywanie zmiennych globalnych.<\/p>\n\n\n\n<p>Z\u0142y przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nx = 10\\n\\ndef zmien():\\n global x\\n x = 20\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Przy wi\u0119kszym projekcie prowadzi to do chaosu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"struktury-danych-i-algorytmy-potrzebne-do-wydajnego-przetwarzania-wiekszych-zbiorow-informacji\">Struktury danych i algorytmy potrzebne do wydajnego przetwarzania wi\u0119kszych zbior\u00f3w informacji<\/h2>\n\n\n\n<p>Wydajno\u015b\u0107 programu zale\u017cy g\u0142\u00f3wnie od algorytm\u00f3w i struktur danych, nie od samego j\u0119zyka.<\/p>\n\n\n\n<p>Lista w Pythonie jest dynamiczn\u0105 tablic\u0105.<\/p>\n\n\n\n<p>Operacje:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Operacja<\/th><th>Z\u0142o\u017cono\u015b\u0107<\/th><\/tr><\/thead><tbody><tr><td>dost\u0119p po indeksie<\/td><td>O(1)<\/td><\/tr><tr><td>append()<\/td><td>\u015brednio O(1)<\/td><\/tr><tr><td>insert() na pocz\u0105tku<\/td><td>O(n)<\/td><\/tr><tr><td>wyszukiwanie<\/td><td>O(n)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Przyk\u0142ad problemu wydajno\u015bciowego:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nliczby = []\\n\\nfor i in range(1000000):\\n liczby.insert(0, i)\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>To bardzo wolne, poniewa\u017c elementy s\u0105 przesuwane w pami\u0119ci.<\/p>\n\n\n\n<p>Znacznie lepiej:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nliczby = []\\n\\nfor i in range(1000000):\\n liczby.append(i)\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>S\u0142ownik (<code>dict<\/code>) wykorzystuje tablic\u0119 haszuj\u0105c\u0105.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nosoba = {\\n \\\"imie\\\": \\\"Jan\\\",\\n \\\"wiek\\\": 30\\n}\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Dost\u0119p do danych jest zwykle O(1).<\/p>\n\n\n\n<p>Sortowanie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nliczby = [5,1,9,2]\\nliczby.sort()\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Python u\u017cywa algorytmu Timsort. \u0141\u0105czy cechy merge sorta i insertion sorta.<\/p>\n\n\n\n<p>Z\u0142o\u017cono\u015b\u0107:<\/p>\n\n\n\n<p><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mi>O<\/mi><mo stretchy=\"false\">(<\/mo><mi>n<\/mi><mi>log<\/mi><mo>\u2061<\/mo><mi>n<\/mi><mo stretchy=\"false\">)<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">O(n \\log n)<\/annotation><\/semantics><\/math><\/p>\n\n\n\n<p>Przy ma\u0142ych danych r\u00f3\u017cnica mi\u0119dzy algorytmami bywa niewidoczna. Przy milionach rekord\u00f3w b\u0142\u0119dny wyb\u00f3r struktury danych potrafi zwi\u0119kszy\u0107 czas dzia\u0142ania z sekund do godzin.<\/p>\n\n\n\n<p>Przyk\u0142ad liniowego wyszukiwania:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\ndef szukaj(lista, x):\\n for element in lista:\\n if element == x:\\n return True\\n return False\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Dla posortowanych danych lepsze b\u0119dzie wyszukiwanie binarne.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nimport bisect\\n\\nlista = [1,2,3,4,5]\\nindex = bisect.bisect_left(lista, 4)\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"operacje-na-plikach-obsluga-wyjatkow-oraz-zabezpieczanie-programu-przed-utrata-danych\">Operacje na plikach, obs\u0142uga wyj\u0105tk\u00f3w oraz zabezpieczanie programu przed utrat\u0105 danych<\/h2>\n\n\n\n<p>Programy u\u017cytkowe bardzo cz\u0119sto pracuj\u0105 na plikach.<\/p>\n\n\n\n<p>Odczyt pliku:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nwith open(\\\"dane.txt\\\", \\\"r\\\", encoding=\\\"utf-8\\\") as plik:\\n tekst = plik.read()\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><code>with<\/code> automatycznie zamyka plik.<\/p>\n\n\n\n<p>Bez tego mo\u017cna doprowadzi\u0107 do wycieku uchwyt\u00f3w systemowych.<\/p>\n\n\n\n<p>Zapis:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nwith open(\\\"wynik.txt\\\", \\\"w\\\", encoding=\\\"utf-8\\\") as plik:\\n plik.write(\\\"test\\\")\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Tryby pracy:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tryb<\/th><th>Znaczenie<\/th><\/tr><\/thead><tbody><tr><td>r<\/td><td>odczyt<\/td><\/tr><tr><td>w<\/td><td>nadpisanie<\/td><\/tr><tr><td>a<\/td><td>dopisywanie<\/td><\/tr><tr><td>b<\/td><td>tryb binarny<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Obs\u0142uga wyj\u0105tk\u00f3w:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\ntry:\\n x = 10 \/ 0\\nexcept ZeroDivisionError:\\n print(\\\"dzielenie przez zero\\\")\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Bez wyj\u0105tk\u00f3w program ko\u0144czy dzia\u0142anie b\u0142\u0119dem.<\/p>\n\n\n\n<p>Nie nale\u017cy jednak ukrywa\u0107 wszystkich b\u0142\u0119d\u00f3w.<\/p>\n\n\n\n<p>Z\u0142y przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\ntry:\\n wykonaj()\\nexcept:\\n pass\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Takie konstrukcje utrudniaj\u0105 debugowanie.<\/p>\n\n\n\n<p>Lepsze rozwi\u0105zanie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\ntry:\\n wykonaj()\\nexcept FileNotFoundError as e:\\n print(e)\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>W systemach produkcyjnych b\u0142\u0119dna obs\u0142uga wyj\u0105tk\u00f3w prowadzi do:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>utraty danych<\/li>\n\n\n\n<li>uszkodzenia plik\u00f3w<\/li>\n\n\n\n<li>zawieszania proces\u00f3w<\/li>\n\n\n\n<li>b\u0142\u0119dnych wynik\u00f3w oblicze\u0144<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"python-kurs-i-zaleznosc-miedzy-bibliotekami-standardowymi-modulami-zewnetrznymi-oraz-srodowiskiem-uruchomieniowym\">Python kurs i zale\u017cno\u015b\u0107 mi\u0119dzy bibliotekami standardowymi, modu\u0142ami zewn\u0119trznymi oraz \u015brodowiskiem uruchomieniowym<\/h2>\n\n\n\n<p>Du\u017ca cz\u0119\u015b\u0107 si\u0142y Pythona wynika z bibliotek.<\/p>\n\n\n\n<p>Biblioteka standardowa zawiera:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>obs\u0142ug\u0119 plik\u00f3w<\/li>\n\n\n\n<li>JSON<\/li>\n\n\n\n<li>operacje sieciowe<\/li>\n\n\n\n<li>daty i czas<\/li>\n\n\n\n<li>wielow\u0105tkowo\u015b\u0107<\/li>\n\n\n\n<li>matematyk\u0119<\/li>\n<\/ul>\n\n\n\n<p>Przyk\u0142ad modu\u0142u <code>math<\/code>:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nimport math\\n\\nprint(math.sqrt(25))\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Instalacja bibliotek zewn\u0119trznych:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Polecenie<\/th><\/tr><\/thead><tbody><tr><td><code>bash\\npip install requests\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Import:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nimport requests\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u015arodowiska wirtualne rozwi\u0105zuj\u0105 problem konflikt\u00f3w wersji.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Polecenie<\/th><\/tr><\/thead><tbody><tr><td><code>bash\\npython -m venv env\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Aktywacja:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>System<\/th><th>Polecenie<\/th><\/tr><\/thead><tbody><tr><td>Linux\/macOS<\/td><td><code>bash\\nsource env\/bin\/activate\\n<\/code><\/td><\/tr><tr><td>Windows<\/td><td><code>bash\\nenv\\\\Scripts\\\\activate\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Bez izolacji projekt\u00f3w bardzo \u0142atwo doprowadzi\u0107 do sytuacji, w kt\u00f3rej jedna biblioteka psuje dzia\u0142anie innej.<\/p>\n\n\n\n<p>W praktyce problemy wersji s\u0105 jedn\u0105 z najcz\u0119stszych przyczyn awarii projekt\u00f3w wdra\u017canych na nowych serwerach.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"analiza-zlozonosci-obliczeniowej-i-wplyw-algorytmow-na-zuzycie-procesora-oraz-pamieci-ram\">Analiza z\u0142o\u017cono\u015bci obliczeniowej i wp\u0142yw algorytm\u00f3w na zu\u017cycie procesora oraz pami\u0119ci RAM<\/h2>\n\n\n\n<p>Program dzia\u0142aj\u0105cy poprawnie mo\u017ce by\u0107 ca\u0142kowicie nieu\u017cywalny przez z\u0142\u0105 wydajno\u015b\u0107.<\/p>\n\n\n\n<p>Analiza z\u0142o\u017cono\u015bci opisuje wzrost kosztu oblicze\u0144 wraz ze wzrostem danych wej\u015bciowych.<\/p>\n\n\n\n<p>Przyk\u0142ady:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Operacja<\/th><th>Z\u0142o\u017cono\u015b\u0107<\/th><\/tr><\/thead><tbody><tr><td>dost\u0119p do tablicy<\/td><td>O(1)<\/td><\/tr><tr><td>wyszukiwanie liniowe<\/td><td>O(n)<\/td><\/tr><tr><td>sortowanie szybkie \u015brednio<\/td><td>O(n log n)<\/td><\/tr><tr><td>algorytmy brutalne<\/td><td>O(2^n)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Wzrost wyk\u0142adniczy bardzo szybko staje si\u0119 problemem.<\/p>\n\n\n\n<p><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><msup><mn>2<\/mn><mi>n<\/mi><\/msup><\/mrow><annotation encoding=\"application\/x-tex\">2^n<\/annotation><\/semantics><\/math><\/p>\n\n\n\n<p>Dla:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>n<\/th><th>Liczba operacji<\/th><\/tr><\/thead><tbody><tr><td>10<\/td><td>1024<\/td><\/tr><tr><td>20<\/td><td>1 048 576<\/td><\/tr><tr><td>30<\/td><td>ponad miliard<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Dlatego niekt\u00f3re zadania s\u0105 praktycznie niewykonalne dla du\u017cych danych.<\/p>\n\n\n\n<p>Pomiar czasu:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nimport time\\n\\nstart = time.time()\\n\\nfor i in range(1000000):\\n pass\\n\\nend = time.time()\\n\\nprint(end - start)\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Profilowanie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Narz\u0119dzie<\/th><th>Zastosowanie<\/th><\/tr><\/thead><tbody><tr><td>cProfile<\/td><td>analiza funkcji<\/td><\/tr><tr><td>memory_profiler<\/td><td>analiza RAM<\/td><\/tr><tr><td>timeit<\/td><td>pomiar ma\u0142ych fragment\u00f3w<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>W praktyce cz\u0119sto wi\u0119kszy problem stanowi pami\u0119\u0107 ni\u017c CPU. Program mo\u017ce dzia\u0142a\u0107 szybko, ale zu\u017cywa\u0107 kilka gigabajt\u00f3w RAM przez niepotrzebne kopiowanie danych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"praca-z-danymi-tekstowymi-kodowaniem-utf-8-oraz-problemami-wystepujacymi-podczas-przetwarzania-znakow\">Praca z danymi tekstowymi, kodowaniem UTF-8 oraz problemami wyst\u0119puj\u0105cymi podczas przetwarzania znak\u00f3w<\/h2>\n\n\n\n<p>Tekst w komputerze jest reprezentowany jako liczby.<\/p>\n\n\n\n<p>ASCII obs\u0142ugiwa\u0142 tylko podstawowe znaki angielskie.<\/p>\n\n\n\n<p>UTF-8 rozwi\u0105za\u0142 problem wielu j\u0119zyk\u00f3w.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\ntekst = \\\"Za\u017c\u00f3\u0142\u0107 g\u0119\u015bl\u0105 ja\u017a\u0144\\\"\\nprint(tekst)\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Bez poprawnego kodowania pojawiaj\u0105 si\u0119 b\u0142\u0119dy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>krzaki tekstowe<\/li>\n\n\n\n<li>utrata znak\u00f3w<\/li>\n\n\n\n<li>wyj\u0105tki dekodowania<\/li>\n<\/ul>\n\n\n\n<p>Kodowanie pliku:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nwith open(\\\"plik.txt\\\", encoding=\\\"utf-8\\\") as f:\\n dane = f.read()\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Operacje tekstowe:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><th>Dzia\u0142anie<\/th><\/tr><\/thead><tbody><tr><td><code>python\\ntekst.upper()\\n<\/code><\/td><td>wielkie litery<\/td><\/tr><tr><td><code>python\\ntekst.lower()\\n<\/code><\/td><td>ma\u0142e litery<\/td><\/tr><tr><td><code>python\\ntekst.split()\\n<\/code><\/td><td>podzia\u0142 tekstu<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Wyra\u017cenia regularne:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nimport re\\n\\nwynik = re.findall(r\\\"\\\\d+\\\", \\\"abc123\\\")\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Regex bywa bardzo kosztowny obliczeniowo przy \u017ale napisanych wzorcach.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"najczestsze-bledy-poczatkujacych-programistow-oraz-sytuacje-powodujace-trudne-do-wykrycia-problemy\">Najcz\u0119stsze b\u0142\u0119dy pocz\u0105tkuj\u0105cych programist\u00f3w oraz sytuacje powoduj\u0105ce trudne do wykrycia problemy<\/h2>\n\n\n\n<p>Pocz\u0105tkuj\u0105cy zwykle skupiaj\u0105 si\u0119 wy\u0142\u0105cznie na tym, \u017ceby \u201edzia\u0142a\u0142o\u201d. To prowadzi do kodu trudnego do utrzymania.<\/p>\n\n\n\n<p>Typowe problemy:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Problem<\/th><th>Skutek<\/th><\/tr><\/thead><tbody><tr><td>kopiowanie kodu<\/td><td>duplikacja b\u0142\u0119d\u00f3w<\/td><\/tr><tr><td>brak funkcji<\/td><td>chaos logiczny<\/td><\/tr><tr><td>brak walidacji danych<\/td><td>wyj\u0105tki<\/td><\/tr><tr><td>nadmiar globali<\/td><td>trudne debugowanie<\/td><\/tr><tr><td>brak test\u00f3w<\/td><td>regresje<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Cz\u0119sty b\u0142\u0105d:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\nlista = []\\n\\ndef dodaj(x, dane=lista):\\n dane.append(x)\\n return dane\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Argument domy\u015blny jest wsp\u00f3\u0142dzielony mi\u0119dzy wywo\u0142aniami.<\/p>\n\n\n\n<p>Poprawnie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>python\\ndef dodaj(x, dane=None):\\n if dane is None:\\n dane = []\\n\\n dane.append(x)\\n return dane\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Inny problem to niekontrolowane u\u017cywanie bibliotek z internetu. Wielu pocz\u0105tkuj\u0105cych instaluje przypadkowe pakiety bez sprawdzania:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>licencji<\/li>\n\n\n\n<li>bezpiecze\u0144stwa<\/li>\n\n\n\n<li>aktywno\u015bci projektu<\/li>\n\n\n\n<li>kompatybilno\u015bci wersji<\/li>\n<\/ul>\n\n\n\n<p>W \u015brodowiskach firmowych takie decyzje mog\u0105 prowadzi\u0107 do powa\u017cnych luk bezpiecze\u0144stwa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq-dotyczace-nauki-pythona-praktyki-programistycznej-i-budowy-pierwszych-projektow\">FAQ dotycz\u0105ce nauki Pythona, praktyki programistycznej i budowy pierwszych projekt\u00f3w<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-python-nadaje-sie-do-duzych-projektow-produkcyjnych\">Czy Python nadaje si\u0119 do du\u017cych projekt\u00f3w produkcyjnych?<\/h3>\n\n\n\n<p>Tak. Python jest u\u017cywany mi\u0119dzy innymi w systemach backendowych, analizie danych i automatyzacji infrastruktury. Trzeba jednak kontrolowa\u0107 wydajno\u015b\u0107 oraz architektur\u0119 projektu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-warto-uczyc-sie-pythona-przed-c-lub-c\">Czy warto uczy\u0107 si\u0119 Pythona przed C lub C++?<\/h3>\n\n\n\n<p>Dla wi\u0119kszo\u015bci os\u00f3b tak. Python pozwala szybciej zrozumie\u0107 logik\u0119 programowania. C i C++ lepiej pokazuj\u0105 dzia\u0142anie pami\u0119ci oraz systemu operacyjnego.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ile-czasu-potrzeba-na-opanowanie-podstaw\">Ile czasu potrzeba na opanowanie podstaw?<\/h3>\n\n\n\n<p>Przy regularnej pracy 1\u20132 godziny dziennie podstawy mo\u017cna opanowa\u0107 w oko\u0142o 2\u20133 miesi\u0105ce. Samodzielne budowanie sensownych narz\u0119dzi zwykle wymaga wi\u0119cej czasu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"dlaczego-program-dziala-na-jednym-komputerze-a-na-drugim-nie\">Dlaczego program dzia\u0142a na jednym komputerze, a na drugim nie?<\/h3>\n\n\n\n<p>Najcz\u0119\u015bciej problemem s\u0105:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>r\u00f3\u017cne wersje bibliotek<\/li>\n\n\n\n<li>brak zale\u017cno\u015bci<\/li>\n\n\n\n<li>inne kodowanie systemowe<\/li>\n\n\n\n<li>r\u00f3\u017cne wersje interpretera<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-python-jest-wolny\">Czy Python jest wolny?<\/h3>\n\n\n\n<p>W por\u00f3wnaniu z C lub C++ tak, ale dla wielu zastosowa\u0144 r\u00f3\u017cnica nie ma znaczenia. Znacznie wi\u0119kszy wp\u0142yw ma jako\u015b\u0107 algorytmu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-trzeba-znac-matematyke\">Czy trzeba zna\u0107 matematyk\u0119?<\/h3>\n\n\n\n<p>Do podstaw nie. Przy analizie danych, kryptografii, grafice lub sztucznej inteligencji matematyka staje si\u0119 bardzo wa\u017cna.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-warto-pisac-wlasne-projekty-podczas-nauki\">Czy warto pisa\u0107 w\u0142asne projekty podczas nauki?<\/h3>\n\n\n\n<p>Tak. Samo czytanie kodu nie wystarcza. Dopiero w\u0142asne b\u0142\u0119dy ucz\u0105 debugowania, organizacji projektu i pracy z dokumentacj\u0105.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"koncowe-uwagi-dotyczace-praktycznej-nauki-programowania-i-rozwijania-poprawnych-nawykow-podczas-pracy-z-kodem\">Ko\u0144cowe uwagi dotycz\u0105ce praktycznej nauki programowania i rozwijania poprawnych nawyk\u00f3w podczas pracy z kodem<\/h2>\n\n\n\n<p>Najwi\u0119kszy problem pocz\u0105tkuj\u0105cych nie wynika zwykle z trudno\u015bci sk\u0142adni, ale z braku systematyczno\u015bci i zbyt szybkiego przechodzenia do skomplikowanych bibliotek. W praktyce dobrze napisany prosty skrypt jest cenniejszy ni\u017c rozbudowany projekt pe\u0142en kopiowanego kodu bez zrozumienia. Warto regularnie analizowa\u0107 cudze rozwi\u0105zania, mierzy\u0107 wydajno\u015b\u0107 w\u0142asnych program\u00f3w i \u015bwiadomie uczy\u0107 si\u0119 debugowania, bo w\u0142a\u015bnie tam programista sp\u0119dza du\u017c\u0105 cz\u0119\u015b\u0107 realnej pracy.<\/p>\n\n\n\n<p><em>\u0179r\u00f3d\u0142o Foto: Freepik<\/em><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Python powsta\u0142 na pocz\u0105tku lat 90. jako j\u0119zyk maj\u0105cy upro\u015bci\u0107 tworzenie oprogramowania bez konieczno\u015bci pisania du\u017cej ilo\u015bci kodu niskopoziomowego. Dzisiaj u\u017cywa si\u0119 go do analizy danych, automatyzacji pracy biurowej, system\u00f3w backendowych, oblicze\u0144 naukowych, sztucznej inteligencji i prostych narz\u0119dzi administracyjnych. W praktyce wiele os\u00f3b zaczyna nauk\u0119 od skrypt\u00f3w automatyzuj\u0105cych nudne zadania: zmiany nazw plik\u00f3w, przetwarzania CSV, pobierania danych z API albo generowania raport\u00f3w. W\u0142a\u015bnie dlatego Python kurs cz\u0119sto pojawia si\u0119 jako pierwszy kontakt z programowaniem u administrator\u00f3w, analityk\u00f3w i student\u00f3w kierunk\u00f3w technicznych. Python jest j\u0119zykiem interpretowanym. Kod wykonywany jest linia po linii przez interpreter, bez klasycznej kompilacji do pliku wykonywalnego. To upraszcza testowanie i przyspiesza prac\u0119 podczas nauki. Jednocze\u015bnie trzeba rozumie\u0107, \u017ce wygoda okupiona jest pewnymi kosztami wydajno\u015bciowymi. Operacje wykonywane w Pythonie s\u0105 zwykle wolniejsze ni\u017c w C lub C++. Python kurs i zrozumienie r\u00f3\u017cnicy mi\u0119dzy interpreterem, sk\u0142adni\u0105 oraz modelem wykonywania programu W wielu materia\u0142ach pocz\u0105tkuj\u0105cy dostaje gotowe fragmenty kodu bez wyja\u015bnienia, co dzieje si\u0119 pod spodem. To p\u00f3\u017aniej prowadzi do sytuacji, w kt\u00f3rej kto\u015b umie przepisa\u0107 przyk\u0142ad, ale nie rozumie b\u0142\u0119d\u00f3w wykonania. Interpreter Pythona wykonuje instrukcje kolejno. Program mo\u017ce by\u0107 uruchomiony jako: Najprostszy program wygl\u0105da tak: J\u0119zyk Kod Python python\\nprint(\\&#8221;Hello\\&#8221;)\\n C c\\n#include &lt;stdio.h&gt;\\n\\nint main() {\\n printf(\\&#8221;Hello\\\\n\\&#8221;);\\n return 0;\\n}\\n C++ cpp\\n#include &lt;iostream&gt;\\n\\nint main() {\\n std::cout &lt;&lt; \\&#8221;Hello\\&#8221; &lt;&lt; std::endl;\\n return 0;\\n}\\n Ju\u017c tutaj wida\u0107 podstawow\u0105 r\u00f3\u017cnic\u0119. Python ukrywa wiele element\u00f3w technicznych: To przyspiesza prac\u0119, ale mo\u017ce utrudni\u0107 zrozumienie dzia\u0142ania komputera. W Pythonie bardzo wa\u017cne s\u0105 wci\u0119cia. Nie s\u0105 tylko kwesti\u0105 estetyki. Okre\u015blaj\u0105 struktur\u0119 programu. Poprawny kod Niepoprawny kod python\\nif 5 &gt; 2:\\n print(\\&#8221;OK\\&#8221;)\\n python\\nif 5 &gt; 2:\\nprint(\\&#8221;OK\\&#8221;)\\n B\u0142\u0105d wci\u0119cia ko\u0144czy si\u0119 wyj\u0105tkiem IndentationError. Model wykonywania programu mo\u017cna upro\u015bci\u0107 do kilku etap\u00f3w: To wa\u017cne przy analizie wydajno\u015bci. Programista cz\u0119sto zak\u0142ada, \u017ce kod dzia\u0142a \u201ebezpo\u015brednio na procesorze\u201d, co w Pythonie nie jest prawd\u0105. Typy danych, zmienne i spos\u00f3b przechowywania informacji w pami\u0119ci operacyjnej W Pythonie wszystko jest obiektem. Nawet liczby ca\u0142kowite maj\u0105 w\u0142asne metody i reprezentacj\u0119 wewn\u0119trzn\u0105. Podstawowe typy: Typ Opis Przyk\u0142ad int liczby ca\u0142kowite 10 float liczby zmiennoprzecinkowe 3.14 str tekst &#8222;abc&#8221; bool warto\u015bci logiczne True list lista [1,2,3] tuple krotka (1,2) dict s\u0142ownik {\\&#8221;a\\&#8221;:1} set zbi\u00f3r {1,2,3} Przyk\u0142ad deklaracji: J\u0119zyk Kod Python python\\nx = 10\\nname = \\&#8221;Jan\\&#8221;\\nactive = True\\n C c\\nint x = 10;\\nchar name[] = \\&#8221;Jan\\&#8221;;\\nint active = 1;\\n Python sam okre\u015bla typ zmiennej. Mechanizm ten nazywa si\u0119 dynamicznym typowaniem. To wygodne, ale generuje pu\u0142apki. Kod Efekt python\\nx = 5\\nx = \\&#8221;tekst\\&#8221;\\n Zmienna zmienia typ w trakcie dzia\u0142ania programu W wi\u0119kszych projektach takie sytuacje prowadz\u0105 do trudnych b\u0142\u0119d\u00f3w logicznych. Istotna jest te\u017c r\u00f3\u017cnica mi\u0119dzy kopiowaniem warto\u015bci a kopiowaniem referencji. Kod Wynik python\\na = [1,2]\\nb = a\\nb.append(3)\\nprint(a)\\n [1,2,3] Obie zmienne wskazuj\u0105 na ten sam obiekt w pami\u0119ci. Poprawne kopiowanie: Kod Wynik python\\nimport copy\\n\\na = [1,2]\\nb = copy.deepcopy(a)\\n Niezale\u017cne obiekty W praktyce wiele b\u0142\u0119d\u00f3w w Pythonie wynika w\u0142a\u015bnie z niezrozumienia mutowalno\u015bci obiekt\u00f3w. Python kurs i praktyczne wykorzystanie instrukcji warunkowych, p\u0119tli oraz funkcji podczas budowy prostych narz\u0119dzi Program bez sterowania przep\u0142ywem praktycznie nie ma warto\u015bci u\u017cytkowej. Instrukcje warunkowe: Kod Dzia\u0142anie python\\nx = 10\\n\\nif x &gt; 5:\\n print(\\&#8221;du\u017ca liczba\\&#8221;)\\nelse:\\n print(\\&#8221;ma\u0142a liczba\\&#8221;)\\n Sprawdzenie warunku Zagnie\u017cd\u017cone warunki szybko staj\u0105 si\u0119 nieczytelne. Z\u0142y przyk\u0142ad: Kod python\\nif x &gt; 0:\\n if x &lt; 100:\\n if x % 2 == 0:\\n print(\\&#8221;OK\\&#8221;)\\n Lepsze rozwi\u0105zanie: Kod python\\nif 0 &lt; x &lt; 100 and x % 2 == 0:\\n print(\\&#8221;OK\\&#8221;)\\n P\u0119tle: Rodzaj Kod for python\\nfor i in range(5):\\n print(i)\\n while python\\nx = 0\\nwhile x &lt; 5:\\n print(x)\\n x += 1\\n P\u0119tla while jest bardziej niebezpieczna. \u0141atwo stworzy\u0107 p\u0119tl\u0119 niesko\u0144czon\u0105. Kod python\\nwhile True:\\n print(\\&#8221;dzia\u0142a\\&#8221;)\\n Funkcje pozwalaj\u0105 dzieli\u0107 kod na logiczne cz\u0119\u015bci. Kod python\\ndef suma(a, b):\\n return a + b\\n\\nwynik = suma(2, 3)\\n W praktyce dobra funkcja powinna: Cz\u0119sty problem pocz\u0105tkuj\u0105cych to nadu\u017cywanie zmiennych globalnych. Z\u0142y przyk\u0142ad: Kod python\\nx = 10\\n\\ndef zmien():\\n global x\\n x = 20\\n Przy wi\u0119kszym projekcie prowadzi to do chaosu. Struktury danych i algorytmy potrzebne do wydajnego przetwarzania wi\u0119kszych zbior\u00f3w informacji Wydajno\u015b\u0107 programu zale\u017cy g\u0142\u00f3wnie od algorytm\u00f3w i struktur danych, nie od samego j\u0119zyka. Lista w Pythonie jest dynamiczn\u0105 tablic\u0105. Operacje: Operacja Z\u0142o\u017cono\u015b\u0107 dost\u0119p po indeksie O(1) append() \u015brednio O(1) insert() na pocz\u0105tku O(n) wyszukiwanie O(n) Przyk\u0142ad problemu wydajno\u015bciowego: Kod python\\nliczby = []\\n\\nfor i in range(1000000):\\n liczby.insert(0, i)\\n To bardzo wolne, poniewa\u017c elementy s\u0105 przesuwane w pami\u0119ci. Znacznie lepiej: Kod python\\nliczby = []\\n\\nfor i in range(1000000):\\n liczby.append(i)\\n S\u0142ownik (dict) wykorzystuje tablic\u0119 haszuj\u0105c\u0105. Kod python\\nosoba = {\\n \\&#8221;imie\\&#8221;: \\&#8221;Jan\\&#8221;,\\n \\&#8221;wiek\\&#8221;: 30\\n}\\n Dost\u0119p do danych jest zwykle O(1). Sortowanie: Kod python\\nliczby = [5,1,9,2]\\nliczby.sort()\\n Python u\u017cywa algorytmu Timsort. \u0141\u0105czy cechy merge sorta i insertion sorta. Z\u0142o\u017cono\u015b\u0107: O(nlog\u2061n)O(n \\log n) Przy ma\u0142ych danych r\u00f3\u017cnica mi\u0119dzy algorytmami bywa niewidoczna. Przy milionach rekord\u00f3w b\u0142\u0119dny wyb\u00f3r struktury danych potrafi zwi\u0119kszy\u0107 czas dzia\u0142ania z sekund do godzin. Przyk\u0142ad liniowego wyszukiwania: Kod python\\ndef szukaj(lista, x):\\n for element in lista:\\n if element == x:\\n return True\\n return False\\n Dla posortowanych danych lepsze b\u0119dzie wyszukiwanie binarne. Kod python\\nimport bisect\\n\\nlista = [1,2,3,4,5]\\nindex = bisect.bisect_left(lista, 4)\\n Operacje na plikach, obs\u0142uga wyj\u0105tk\u00f3w oraz zabezpieczanie programu przed utrat\u0105 danych Programy u\u017cytkowe bardzo cz\u0119sto pracuj\u0105 na plikach. Odczyt pliku: Kod python\\nwith open(\\&#8221;dane.txt\\&#8221;, \\&#8221;r\\&#8221;, encoding=\\&#8221;utf-8\\&#8221;) as plik:\\n tekst = plik.read()\\n with automatycznie zamyka plik. Bez tego mo\u017cna doprowadzi\u0107 do wycieku uchwyt\u00f3w systemowych. Zapis: Kod python\\nwith open(\\&#8221;wynik.txt\\&#8221;, \\&#8221;w\\&#8221;, encoding=\\&#8221;utf-8\\&#8221;) as plik:\\n plik.write(\\&#8221;test\\&#8221;)\\n Tryby pracy: Tryb Znaczenie r odczyt w nadpisanie a dopisywanie b tryb binarny Obs\u0142uga wyj\u0105tk\u00f3w: Kod python\\ntry:\\n x = 10 \/ 0\\nexcept ZeroDivisionError:\\n print(\\&#8221;dzielenie przez zero\\&#8221;)\\n Bez wyj\u0105tk\u00f3w program ko\u0144czy dzia\u0142anie b\u0142\u0119dem. Nie nale\u017cy jednak ukrywa\u0107 wszystkich b\u0142\u0119d\u00f3w. Z\u0142y przyk\u0142ad: Kod python\\ntry:\\n wykonaj()\\nexcept:\\n pass\\n Takie konstrukcje utrudniaj\u0105 debugowanie. Lepsze rozwi\u0105zanie: Kod python\\ntry:\\n wykonaj()\\nexcept FileNotFoundError as e:\\n print(e)\\n W systemach produkcyjnych b\u0142\u0119dna obs\u0142uga wyj\u0105tk\u00f3w prowadzi do: Python kurs i zale\u017cno\u015b\u0107 mi\u0119dzy bibliotekami standardowymi, modu\u0142ami zewn\u0119trznymi oraz \u015brodowiskiem uruchomieniowym Du\u017ca cz\u0119\u015b\u0107 si\u0142y Pythona wynika z bibliotek. Biblioteka standardowa zawiera: Przyk\u0142ad modu\u0142u math: Kod python\\nimport math\\n\\nprint(math.sqrt(25))\\n Instalacja bibliotek zewn\u0119trznych: Polecenie bash\\npip install requests\\n Import: Kod python\\nimport requests\\n \u015arodowiska wirtualne rozwi\u0105zuj\u0105 problem konflikt\u00f3w wersji. Polecenie bash\\npython -m venv env\\n Aktywacja: System Polecenie Linux\/macOS bash\\nsource env\/bin\/activate\\n Windows bash\\nenv\\\\Scripts\\\\activate\\n Bez izolacji projekt\u00f3w bardzo \u0142atwo doprowadzi\u0107 do sytuacji, w kt\u00f3rej jedna biblioteka psuje dzia\u0142anie innej. W praktyce problemy wersji s\u0105 jedn\u0105 z najcz\u0119stszych przyczyn awarii projekt\u00f3w wdra\u017canych na nowych serwerach. Analiza z\u0142o\u017cono\u015bci obliczeniowej i wp\u0142yw algorytm\u00f3w na zu\u017cycie procesora oraz pami\u0119ci RAM Program dzia\u0142aj\u0105cy poprawnie mo\u017ce by\u0107 ca\u0142kowicie nieu\u017cywalny przez z\u0142\u0105 wydajno\u015b\u0107. Analiza z\u0142o\u017cono\u015bci opisuje wzrost kosztu oblicze\u0144 wraz ze wzrostem danych wej\u015bciowych. Przyk\u0142ady: Operacja Z\u0142o\u017cono\u015b\u0107 dost\u0119p do tablicy O(1) wyszukiwanie liniowe O(n) sortowanie szybkie \u015brednio O(n log n) algorytmy brutalne O(2^n) Wzrost wyk\u0142adniczy bardzo szybko staje si\u0119 problemem. 2n2^n Dla: n Liczba operacji 10 1024 20 1 048 576 30 ponad miliard Dlatego niekt\u00f3re zadania s\u0105 praktycznie niewykonalne dla du\u017cych danych. Pomiar czasu: Kod python\\nimport time\\n\\nstart = time.time()\\n\\nfor i in range(1000000):\\n pass\\n\\nend = time.time()\\n\\nprint(end &#8211; start)\\n Profilowanie: Narz\u0119dzie Zastosowanie cProfile analiza funkcji memory_profiler analiza RAM timeit pomiar ma\u0142ych fragment\u00f3w W praktyce cz\u0119sto wi\u0119kszy problem stanowi pami\u0119\u0107 ni\u017c CPU. Program mo\u017ce dzia\u0142a\u0107 szybko, ale zu\u017cywa\u0107 kilka gigabajt\u00f3w RAM przez niepotrzebne kopiowanie danych. Praca z danymi tekstowymi, kodowaniem UTF-8 oraz problemami wyst\u0119puj\u0105cymi podczas przetwarzania znak\u00f3w Tekst w komputerze jest reprezentowany jako liczby. ASCII obs\u0142ugiwa\u0142 tylko podstawowe znaki angielskie. UTF-8 rozwi\u0105za\u0142 problem wielu j\u0119zyk\u00f3w. Przyk\u0142ad: Kod python\\ntekst = \\&#8221;Za\u017c\u00f3\u0142\u0107 g\u0119\u015bl\u0105 ja\u017a\u0144\\&#8221;\\nprint(tekst)\\n Bez poprawnego kodowania pojawiaj\u0105 si\u0119 b\u0142\u0119dy: Kodowanie pliku: Kod python\\nwith open(\\&#8221;plik.txt\\&#8221;, encoding=\\&#8221;utf-8\\&#8221;) as f:\\n dane = f.read()\\n Operacje tekstowe: Kod Dzia\u0142anie python\\ntekst.upper()\\n wielkie litery python\\ntekst.lower()\\n ma\u0142e litery python\\ntekst.split()\\n podzia\u0142 tekstu Wyra\u017cenia regularne: Kod python\\nimport re\\n\\nwynik = re.findall(r\\&#8221;\\\\d+\\&#8221;, \\&#8221;abc123\\&#8221;)\\n Regex bywa bardzo kosztowny obliczeniowo przy \u017ale napisanych wzorcach. Najcz\u0119stsze b\u0142\u0119dy pocz\u0105tkuj\u0105cych programist\u00f3w oraz sytuacje powoduj\u0105ce trudne do wykrycia problemy Pocz\u0105tkuj\u0105cy zwykle skupiaj\u0105 si\u0119 wy\u0142\u0105cznie na tym, \u017ceby \u201edzia\u0142a\u0142o\u201d. To prowadzi do kodu trudnego do utrzymania. Typowe problemy: Problem Skutek kopiowanie kodu duplikacja b\u0142\u0119d\u00f3w brak funkcji chaos logiczny brak walidacji danych wyj\u0105tki nadmiar globali trudne debugowanie brak test\u00f3w regresje Cz\u0119sty b\u0142\u0105d: Kod python\\nlista = []\\n\\ndef dodaj(x, dane=lista):\\n dane.append(x)\\n return dane\\n Argument domy\u015blny jest wsp\u00f3\u0142dzielony mi\u0119dzy wywo\u0142aniami. Poprawnie: Kod python\\ndef dodaj(x, dane=None):\\n if dane is None:\\n dane = []\\n\\n dane.append(x)\\n return dane\\n Inny problem to niekontrolowane u\u017cywanie bibliotek z internetu. Wielu pocz\u0105tkuj\u0105cych instaluje przypadkowe pakiety bez sprawdzania: W \u015brodowiskach firmowych takie decyzje mog\u0105 prowadzi\u0107 do powa\u017cnych luk bezpiecze\u0144stwa. FAQ dotycz\u0105ce nauki Pythona, praktyki programistycznej i budowy pierwszych projekt\u00f3w Czy Python nadaje si\u0119 do du\u017cych projekt\u00f3w produkcyjnych? Tak. Python jest u\u017cywany mi\u0119dzy innymi w systemach backendowych, analizie danych i automatyzacji infrastruktury. Trzeba jednak kontrolowa\u0107 wydajno\u015b\u0107 oraz architektur\u0119 projektu. Czy warto uczy\u0107 si\u0119 Pythona przed C lub C++? Dla wi\u0119kszo\u015bci os\u00f3b tak. Python pozwala szybciej zrozumie\u0107 logik\u0119 programowania. C i C++ lepiej pokazuj\u0105 dzia\u0142anie pami\u0119ci oraz systemu operacyjnego. Ile czasu potrzeba na opanowanie podstaw? Przy regularnej pracy 1\u20132 godziny dziennie podstawy mo\u017cna opanowa\u0107 w oko\u0142o 2\u20133 miesi\u0105ce. Samodzielne budowanie sensownych narz\u0119dzi zwykle wymaga wi\u0119cej czasu. Dlaczego program dzia\u0142a na jednym komputerze, a na drugim nie? Najcz\u0119\u015bciej problemem s\u0105: Czy Python jest wolny? W por\u00f3wnaniu z C lub C++ tak, ale dla wielu zastosowa\u0144 r\u00f3\u017cnica nie ma znaczenia. Znacznie wi\u0119kszy wp\u0142yw ma jako\u015b\u0107 algorytmu. Czy trzeba zna\u0107 matematyk\u0119? Do podstaw nie. Przy analizie danych, kryptografii, grafice lub sztucznej inteligencji matematyka staje si\u0119 bardzo wa\u017cna. Czy warto pisa\u0107 w\u0142asne projekty podczas nauki? Tak. Samo czytanie kodu nie wystarcza. Dopiero w\u0142asne b\u0142\u0119dy ucz\u0105 debugowania, organizacji projektu i pracy z dokumentacj\u0105. Ko\u0144cowe uwagi dotycz\u0105ce praktycznej nauki programowania i rozwijania poprawnych nawyk\u00f3w podczas pracy z kodem Najwi\u0119kszy problem pocz\u0105tkuj\u0105cych nie wynika zwykle z trudno\u015bci sk\u0142adni, ale z braku systematyczno\u015bci i zbyt szybkiego przechodzenia do skomplikowanych bibliotek. W praktyce dobrze napisany prosty skrypt jest cenniejszy ni\u017c rozbudowany projekt pe\u0142en kopiowanego kodu bez zrozumienia. Warto regularnie analizowa\u0107 cudze rozwi\u0105zania, mierzy\u0107 wydajno\u015b\u0107 w\u0142asnych program\u00f3w i \u015bwiadomie uczy\u0107 si\u0119 debugowania, bo w\u0142a\u015bnie tam programista sp\u0119dza du\u017c\u0105 cz\u0119\u015b\u0107 realnej pracy. \u0179r\u00f3d\u0142o Foto: Freepik<\/p>\n","protected":false},"author":1,"featured_media":1582,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[],"class_list":["post-1581","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\/1581","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=1581"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1581\/revisions"}],"predecessor-version":[{"id":1583,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1581\/revisions\/1583"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media\/1582"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/categories?post=1581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/tags?post=1581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}