Jak zacząć przygodę z programowaniem w Pythonie: praktyczny przewodnik dla początkujących

0
4
Rate this post

Nawigacja po artykule:

Dlaczego właśnie Python na start? Mit „trudnego programowania”

Do czego faktycznie używa się Pythona

Python od lat jest jednym z najpopularniejszych języków programowania na świecie. Nie dlatego, że jest „modny”, ale dlatego, że daje się używać w bardzo różnych obszarach. Jeden język, a możesz:

  • tworzyć proste strony i backendy aplikacji webowych (Django, Flask, FastAPI),
  • automatyzować powtarzalne zadania na komputerze – od przerabiania plików po pobieranie danych z internetu,
  • pracować z analizą danych i data science (NumPy, pandas, Matplotlib),
  • budować modele uczenia maszynowego (TensorFlow, PyTorch, scikit-learn),
  • tworzyć narzędzia administracyjne i skrypty DevOps (np. dla Linuxa czy środowisk chmurowych),
  • prototypować pomysły biznesowe szybciej niż w większości innych języków.

W praktyce oznacza to, że zaczynając naukę programowania w Pythonie, nie uczysz się „zabawki edukacyjnej”, ale pełnoprawnego narzędzia, z którego korzystają duże firmy technologiczne, startupy i zespoły badawcze.

Warto też dostrzec, że Python ma ogromny ekosystem bibliotek. Jeśli chcesz połączyć się z API, parsować pliki PDF, obrabiać obrazy, pisać bota do komunikatora – w większości przypadków znajdziesz gotową bibliotekę, którą da się podłączyć kilkoma linijkami kodu. Dla początkujących to ogromne ułatwienie, bo można szybciej dojść do pierwszych sensownych efektów.

Python a inne języki startowe: gdzie jest łatwiej

Porównując Pythona z typowymi „językami na start” jak C++, Java czy JavaScript, różnicę czuć już w pierwszych minutach pracy. W Pythonie klasyczny „Hello, world” to:

print("Hello, world")

W C++ ten sam efekt wymaga kilku dodatkowych linijek kodu z nagłówkami, funkcją main(), średnikami i specyficzną składnią. To nie jest złe – C++ ma inne cele – ale jako pierwsze spotkanie z programowaniem bywa zniechęcający. Java również wymaga struktury klas i metod zanim pojawi się pierwsze System.out.println().

Python celowo upraszcza składnię: nie ma średników na końcu linii, nawiasów klamrowych do bloków kodu, deklaracji typu zmiennej. Zamiast:

int age = 30;

wystarczy:

age = 30

Przez to próg wejścia jest zauważalnie niższy. Możesz skupić się na logice, a nie na walce z kompilatorem, który domaga się średnika w odpowiednim miejscu. Dla kogoś, kto zaczyna naukę programowania krok po kroku i chce jak najszybciej wyklikać pierwsze programy w Pythonie, to ogromna przewaga.

Czy trzeba być „mocnym z matmy”, żeby pisać w Pythonie

Popularny lęk: „Programowanie? To chyba dla olimpijczyków z matematyki”. Ten mit najskuteczniej odstrasza osoby, które w szkole średnio dogadywały się z równaniami czy funkcjami. Rzeczywistość jest dużo spokojniejsza. Do nauki programowania w Pythonie na poziomie początkującym potrzebujesz głównie:

  • umiejętności logicznego myślenia (jeśli ogarniasz instrukcje obsługi lub przepisy kuchenne – to już jest zalążek),
  • cierpliwości do testowania i poprawiania błędów,
  • gotowości do szukania informacji w dokumentacji i w internecie.

Zaawansowana matematyka pojawia się dopiero w specjalistycznych dziedzinach: grafika 3D, uczenie maszynowe, algorytmy optymalizacyjne. Do pierwszych skryptów automatyzujących pracę biurową, analiz prostych danych z Excela czy stworzenia prostej aplikacji webowej potrzeba co najwyżej działań na liczbach, procentach i paru wzorów ze szkoły.

Mit vs rzeczywistość: wiele osób z kierunków humanistycznych czy artystycznych uczy się Pythona po trzydziestce czy czterdziestce, żeby lepiej ogarniać narzędzia cyfrowe w pracy. Nie robią na co dzień całek, tylko satysfakcjonujące, praktyczne programy. Matematyka jest atutem, ale nie blokadą.

Python „tylko do nauki”? Przykłady z realnego świata

Kolejny mit: „Python jest fajny na studiach, ale w pracy używa się innych języków”. W rzeczywistości Python od lat funkcjonuje w produkcyjnych środowiskach, w krytycznych systemach firm i instytucji. W Pythonie powstały lub korzystają intensywnie z niego między innymi:

  • serwisy webowe o dużym ruchu (backendy w Django/Flask),
  • wewnętrzne narzędzia automatyzujące procesy biznesowe w korporacjach,
  • platformy analityczne i raportujące dla zespołów biznesowych,
  • systemy rekomendacyjne i wyszukiwarki oparte na modelach uczenia maszynowego.

Python jest też językiem-lingua franca w świecie data science i AI. Badacze i inżynierowie szybciej tworzą prototypy, walidują hipotezy, integrują modele z aplikacjami. To nie jest „język edukacyjny” – to narzędzie pracy.

Jeśli celem jest nauka Pythona od zera, żeby później wykorzystywać go komercyjnie, wciąż jesteś w dobrym miejscu. Istnieje mnóstwo ogłoszeń o pracę dla Python Developerów, Data Engineerów czy analityków danych, którzy muszą znać Pythona wystarczająco dobrze, by kod utrzymywać i rozwijać.

Programowanie to nie tylko składnia

Nauka programowania często kojarzy się ze „zbijaniem” kolejnych konstrukcji języka: pętle, warunki, funkcje, klasy. Tymczasem istotą programowania jest umiejętność rozwiązywania problemów krok po kroku. Python jest tu jedynie narzędziem do zapisania tych kroków w formie zrozumiałej dla komputera.

Kiedy zaczynasz przygodę z programowaniem w Pythonie, trenujesz jednocześnie:

  • myślenie algorytmiczne – rozbijanie zadań na małe, jednoznaczne kroki,
  • umiejętność czytania dokumentacji i przykładów (często po angielsku),
  • analizowanie komunikatów błędów i szukanie przyczyny problemu,
  • planowanie prostych projektów: co jest wejściem, wyjściem, jak przechowywać dane.

Sam Python, ze swoją prostą składnią, pozwala skupić się właśnie na tych umiejętnościach. Gdy złapiesz ten sposób myślenia, przeskok do innych języków lub narzędzi staje się dużo łatwiejszy.

Co trzeba przygotować przed pierwszą linijką kodu

Sprzęt i system operacyjny – bez mitów o „mocnych maszynach”

Do pierwszych kroków w Pythonie nie jest potrzebna stacja robocza za kilka tysięcy. W zupełności wystarczy zwykły laptop lub komputer stacjonarny z jednym z popularnych systemów:

  • Windows 10 lub nowszy,
  • macOS,
  • Linux (np. Ubuntu, Mint, Fedora).

Ważniejsze od mocy procesora jest to, żeby sprzęt działał stabilnie i nie zamykał się przy kilku otwartych programach. Typowy komputer biurowy poradzi sobie bez problemu z edytorem kodu, konsolą i przeglądarką.

Mit, który często się pojawia: „Do programowania potrzeba superwydajnego laptopa dla graczy”. Przy nauce języka Python to zwykła przesada. Cięższe wymagania pojawiają się dopiero, gdy zaczynasz trenować duże modele AI, obrabiać gigabajty danych albo kompilować bardzo rozbudowane projekty w językach takich jak C++. Dla początkującego programisty Pythona liczy się bardziej wygodna klawiatura i sensowna rozdzielczość ekranu niż ilość rdzeni procesora.

Instalacja Pythona – skąd pobrać i którą wersję wybrać

Najlepsze źródło to oficjalna strona python.org. Dla każdego systemu dostępny jest instalator. Kilka prostych zasad, które ułatwią start:

  • zawsze wybieraj wersję z gałęzi 3.x (np. 3.12),
  • unikaj Pythona 2 – to przestarzała wersja, już niewspierana,
  • na Windowsie podczas instalacji zaznacz opcję Add Python to PATH – dzięki temu uruchomisz Pythona z wiersza poleceń.

Na macOS i Linuksie Python jest często wstępnie zainstalowany w systemie, ale bywa to starsza wersja / inna dystrybucja. Warto zainstalować aktualną „trójkę” z oficjalnego źródła lub użyć menedżerów wersji (pyenv, Anaconda) – szczególnie, jeśli później planujesz pracę z data science.

Po instalacji można sprawdzić wersję poleceniem:

python --version
# lub
python3 --version

Jeśli system zwraca numer 3.x, wszystko jest w porządku. W przeciwnym razie trzeba sprawdzić PATH lub używać polecenia python3 zamiast python.

Wybór edytora lub IDE: prostota kontra „wypas”

Do pisania pierwszych programów w Pythonie wystarczy najprostszy edytor tekstu, który zapisuje pliki jako czysty tekst. Jednak w praktyce wygoda pracy zależy w dużej mierze od narzędzia. Najpopularniejsze opcje dla początkujących:

  • IDLE – prosty edytor dołączony do Pythona; ma kolorowanie składni, uruchamianie skryptów i konsolę interaktywną.
  • Visual Studio Code (VS Code) – bardzo lekki, darmowy edytor z ogromnym ekosystemem wtyczek. Po zainstalowaniu rozszerzenia „Python” staje się wygodnym środowiskiem pracy.
  • PyCharm Community – darmowa wersja popularnego IDE dla Pythona. Bardziej rozbudowane narzędzie z wieloma funkcjami „podpowiadającymi” kod.

Mit, który dobrze od razu obalić: „bez profesjonalnego, drogiego IDE nie da się programować”. Da się – i to bardzo dobrze. Dla początkującego dużo ważniejsze jest, by środowisko było przejrzyste, mało rozpraszające i dobrze działało na danym komputerze. Często najlepszym wyborem jest VS Code z podstawowymi rozszerzeniami.

Prosta konfiguracja środowiska na start

Niezależnie od tego, czy wybierzesz VS Code, PyCharm, czy zostaniesz przy IDLE, kilka ustawień potrafi oszczędzić nerwów:

  • ustaw czytelną czcionkę (np. 12–14 px) i ciemny lub jasny motyw według uznania,
  • sprawdź, czy pliki zapisują się w kodowaniu UTF-8 – to ważne np. dla polskich znaków,
  • w VS Code zainstaluj rozszerzenie „Python” od Microsoftu; włącz podpowiadanie składni i linting.

Na tym etapie nie ma sensu tracić czasu na instalację dziesiątek pluginów. W miarę nauki sam zauważysz, czego brakuje: może rozszerzenia do pracy z Git, może narzędzia do formatowania kodu (black), a może integracji z Jupyter Notebook.

Pierwszy kontakt z konsolą i interpreterem Pythona

Czym jest interpreter Pythona i dwa sposoby uruchamiania kodu

Python jest językiem interpretowanym. To oznacza, że kod jest wykonywany linijka po linijce przez interpreter, a nie kompilowany do pliku wykonywalnego jak w C++.

Masz dwa podstawowe sposoby pracy:

  • Tryb interaktywny – uruchamiasz interpreter Pythona w konsoli i wpisujesz polecenia, które od razu się wykonują.
  • Plik .py – piszesz kilka lub kilkadziesiąt linijek w edytorze, zapisujesz jako plik program.py, a potem uruchamiasz go w całości.

Tryb interaktywny jest świetny do eksperymentów, nauki i szybkiego testowania pomysłów. Pliki .py są z kolei niezbędne do tworzenia realnych, powtarzalnych programów. Dobrą praktyką jest używanie obu form równolegle.

Jak uruchomić konsolę Pythona na różnych systemach

Na Windowsie najprostsza droga:

  1. Otwórz „Wiersz polecenia” albo PowerShell.
  2. Wpisz python lub python3 i naciśnij Enter.

Jeśli instalator dobrze skonfigurował PATH, zobaczysz interaktywną konsolę z trzema znakami zachęty >>>. To sygnał, że interpreter Pythona czeka na polecenia.

Na macOS i Linuksie procedura jest podobna:

  1. Otwórz Terminal.
  2. Wpisz python3 i Enter.

Jeżeli system ma domyślnie podpiętego Pythona 3 pod komendę python, możesz użyć również jej. Najważniejsze, żeby wersja wyświetlana na starcie była z gałęzi 3.x.

Pierwsze komendy w trybie interaktywnym

Po zobaczeniu zachęty >>> można od razu wydawać interpreterowi proste polecenia. Nie trzeba niczego „tworzyć” ani zapisywać – to taki kalkulator na sterydach.

W tym miejscu przyda się jeszcze jeden praktyczny punkt odniesienia: Nauka C++ bez frustracji: standardy, CMake, biblioteki i nawyki, które uratują Twój kod w pracy.

Spróbuj najpierw prostych obliczeń:

>>> 2 + 2
4
>>> 10 * 3
30
>>> (5 + 3) / 2
4.0

Interpreter od razu zwraca wynik. Nie dodajesz średników na końcu linii, nie piszesz żadnych „mainów”. Piszesz wyrażenie – dostajesz rezultat.

Możesz też przypisywać wartości do zmiennych:

>>> x = 5
>>> y = 7
>>> x + y
12

Mit, który często blokuje początkujących: „najpierw muszę poznać całą teorię, zanim coś wpiszę”. W praktyce znacznie szybciej uczysz się, gdy od razu eksperymentujesz w interpreterze i patrzysz, co się dzieje.

Wyjście z interpretera i pierwsze „błędy”

Aby wyjść z konsoli Pythona, użyj jednego z dwóch sposobów:

  • wpisz exit() i Enter,
  • lub użyj skrótu Ctrl + Z (Windows) / Ctrl + D (macOS/Linux), a potem Enter.

Jeśli wpiszesz coś niepoprawnie, interpreter nie „zepsuje się” na zawsze. Zwyczajnie wyświetli komunikat błędu. Przykład:

>>> 2 +
  File "<stdin>", line 1
    2 +
      ^
SyntaxError: invalid syntax

Ten rodzaj błędu (SyntaxError) oznacza po prostu, że składnia jest niekompletna lub niezgodna z zasadami. Programiści widzą taki komunikat setki razy w tygodniu. Różnica między początkującym a seniorem polega raczej na tym, jak szybko potrafią go zinterpretować.

Pierwszy plik .py i uruchamianie skryptu

Tryb interaktywny jest świetny, ale prawdziwy program zapisujesz w pliku. Zrób prosty test:

  1. Otwórz wybrany edytor (np. VS Code).
  2. Stwórz nowy plik i zapisz jako hello.py w łatwym do znalezienia katalogu.
  3. Wpisz do pliku jedną linijkę:
print("Hello, world!")

Następnie uruchom plik z konsoli, przechodząc do katalogu, w którym go zapisałeś:

cd ścieżka/do/katalogu
python hello.py
# lub
python3 hello.py

Powinieneś zobaczyć w konsoli:

Hello, world!

To jest właśnie podstawowy cykl pracy: edytujesz plik, zapisujesz, uruchamiasz, patrzysz na efekt, poprawiasz.

Typowe potknięcia przy uruchamianiu pliku

Na starcie często pojawiają się trzy problemy:

  • „python nie jest rozpoznawany jako polecenie” – PATH nie jest ustawiony; trzeba poprawić instalację lub użyć pełnej ścieżki do interpretera.
  • „No such file or directory” – próbujesz uruchomić plik, którego nie ma w bieżącym katalogu; sprawdź komendą dir (Windows) lub ls (macOS/Linux), co faktycznie tam leży.
  • Uruchamianie innej wersji Pythona – na jednym systemie może być kilka instalacji; jeśli python uruchamia starą wersję, spróbuj python3.

Nie jest to „psucie systemu”. To zwykłe problemy konfiguracyjne, z którymi mierzą się również zaawansowani użytkownicy przy nowych projektach.

Dłonie piszące kod w Pythonie na laptopie obok książki o Pythonie
Źródło: Pexels | Autor: Christina Morillo

Fundamenty składni: od „hello world” do prostych obliczeń

Instrukcja print – prosty sposób na komunikację z użytkownikiem

Funkcja print() pojawi się w pierwszych godzinach nauki dziesiątki razy. To najłatwiejsza metoda, by zobaczyć, co robi program.

print("Witaj w świecie Pythona!")
print("Suma 2 + 3 to", 2 + 3)

Możesz wypisywać tekst, liczby, wyniki obliczeń, a także kilka elementów naraz – oddzielonych przecinkami. Python automatycznie wstawi między nimi spacje.

Jeśli tekst ma zawierać cudzysłów, użyj drugiego rodzaju cudzysłowu na zewnątrz:

print('To jest "cytat" w tekście')
print("To jest 'cytat' w tekście")

Zmienna – pudełko na dane

Zmienna to po prostu nazwana etykieta na wartość. W Pythonie nie deklarujesz wcześniej typu zmiennej, po prostu przypisujesz wartość:

wiek = 30
imie = "Ala"
pi = 3.14159

Możesz potem używać tych nazw w obliczeniach i innych instrukcjach:

rok_urodzenia = 2024 - wiek
print("Rok urodzenia:", rok_urodzenia)

Mit: „trzeba znać wszystkie typy danych na pamięć, zanim się zacznie”. W praktyce na początku wystarczą liczby i napisy. Reszta dojdzie przy konkretnych problemach.

Podstawowe typy: liczby całkowite, zmiennoprzecinkowe i napisy

Na starcie przewijają się trzy najczęstsze klasy danych:

  • int – liczby całkowite: 0, -5, 2024,
  • float – liczby z częścią ułamkową: 3.14, -0.5,
  • str – ciągi znaków (stringi): "tekst", 'Python 3'.

Możesz sprawdzić typ wartości funkcją type():

print(type(5))        # <class 'int'>
print(type(3.14))     # <class 'float'>
print(type("Python")) # <class 'str'>

Operacje na liczbach – kalkulator plus trochę logiki

Operatorów matematycznych jest kilka, klasyka plus kilka dodatków:

  • + – dodawanie,
  • - – odejmowanie,
  • * – mnożenie,
  • / – dzielenie z wynikiem typu float,
  • // – dzielenie całkowite (wynik bez części ułamkowej),
  • % – reszta z dzielenia (modulo),
  • ** – potęgowanie.
a = 10
b = 3
print(a / b)   # 3.3333333333
print(a // b)  # 3
print(a % b)   # 1
print(2 ** 5)  # 32

Po kilku takich przykładach praca z Pythonem staje się czymś w rodzaju rozbudowanego arkusza kalkulacyjnego – tyle że masz pełną kontrolę nad krokami, które wykonujesz.

Łączenie tekstu, f-stringi i czytelne komunikaty

Tekst można łączyć na kilka sposobów. Najprostszy to konkatenacja:

imie = "Ala"
powitanie = "Cześć, " + imie + "!"
print(powitanie)

Przy dłuższych komunikatach szybciej i czytelniej działają f-stringi (formatowane stringi):

imie = "Ala"
wiek = 30
print(f"Cześć, {imie}. Masz {wiek} lat.")

W nawiasach klamrowych {} można umieszczać nie tylko zmienne, lecz także całe wyrażenia:

a = 5
b = 7
print(f"Suma {a} i {b} to {a + b}")

Wejście od użytkownika – funkcja input()

Program przestaje być „jednokierunkowy”, gdy zaczyna pytać użytkownika o dane. Do tego służy input():

imie = input("Jak masz na imię? ")
print(f"Cześć, {imie}!")

Jedna pułapka: input() zawsze zwraca tekst (string). Jeśli chcesz wczytać liczbę, trzeba ją przekonwertować:

wiek_tekst = input("Podaj swój wiek: ")
wiek = int(wiek_tekst)
rok_urodzenia = 2024 - wiek
print(f"Urodziłeś/aś się w {rok_urodzenia} roku.")

Jeżeli użytkownik wpisze coś, czego nie da się zamienić na liczbę (np. „abc”), pojawi się błąd. To normalny element projektowania programów – później obsługuje się takie sytuacje instrukcjami wyjątków, na początku jednak wystarczy świadomość, że format danych ma znaczenie.

Warunki, pętle i logika – serce prostego programu

Instrukcje warunkowe if/elif/else

Bez możliwości podjęcia decyzji program byłby tylko liniowym skryptem. Instrukcje warunkowe pozwalają wykonywać różne fragmenty kodu w zależności od spełnienia (lub nie) określonych warunków.

temperatura = int(input("Podaj temperaturę na zewnątrz: "))

if temperatura >= 25:
    print("Jest ciepło.")
elif temperatura >= 10:
    print("Jest w miarę chłodno.")
else:
    print("Jest zimno.")

Zauważ dwie rzeczy charakterystyczne dla Pythona:

Jeśli chcesz pójść krok dalej, pomocny może być też wpis: Jak taniej wynająć samochód za granicą: praktyczny poradnik dla podróżujących.

  • po if, elif i else zawsze stoi dwukropek :,
  • ciało instrukcji jest wcięte (najczęściej 4 spacje).

Mit: „wcięcia są tylko dla estetyki”. W Pythonie wcięcia są częścią składni – pomylisz poziomy, dostaniesz błąd lub program zachowa się inaczej, niż planujesz.

Operatory porównań i logika boolowska

Warunki opierają się na porównaniach. Najczęściej używane operatory to:

  • == – równe,
  • != – różne,
  • >, <, >=, <= – większe, mniejsze itd.

Można je łączyć operatorami logicznymi:

  • and – obie części muszą być prawdziwe,
  • or – wystarczy, że jedna część jest prawdziwa,
  • not – negacja.
wiek = int(input("Podaj swój wiek: "))

if wiek >= 18 and wiek < 65:
    print("Jesteś w wieku produkcyjnym.")
elif wiek >= 65:
    print("Jesteś emerytem/emerytką (wg uproszczonego podziału).")
else:
    print("Jesteś niepełnoletni/a.")

Wynikiem każdego takiego porównania jest wartość typu boolTrue albo False. Można je też wypisywać i przypisywać do zmiennych:

czy_cieplo = temperatura >= 20
print(czy_cieplo)  # True lub False

Pętla while – powtarzanie aż do spełnienia warunku

Pętle pozwalają wykonać ten sam fragment kodu wielokrotnie. Pętla while powtarza ciało dopóki warunek jest prawdziwy.

licznik = 1

while licznik <= 5:
    print("To jest iteracja", licznik)
    licznik = licznik + 1

print("Koniec pętli")

Gdy licznik osiągnie 6, warunek licznik <= 5 stanie się fałszywy i pętla się zakończy.

Najczęstszy błąd to zapomnienie o aktualizacji zmiennej sterującej – wtedy warunek zawsze jest prawdziwy i powstaje nieskończona pętla. Konsola zasypuje się tekstem, ale zwykle wystarczy przerwać wykonywanie skrótem Ctrl + C.

Pętla for – iterowanie po sekwencjach

Pętla for w Pythonie działa nieco inaczej niż w wielu językach C-podobnych. Zamiast manipulować ręcznie indeksem, „przechodzi” po elementach sekwencji (np. listy, napisu, wyniku funkcji range()):

for i in range(5):
    print("Numer:", i)

Funkcja range(5) generuje liczby od 0 do 4. Jeśli chcesz zacząć od 1, podaj dwa argumenty:

for i in range(1, 6):
    print("Iteracja:", i)

Pętla for świetnie sprawdza się też przy pracy z tekstem:

napis = "Python"

for znak in napis:
    print(znak)

Przerywanie i omijanie iteracji: break i continue

Czasem potrzebujesz wyjść z pętli wcześniej albo pominąć pojedynczą iterację. Do tego służą dwie proste instrukcje:

  • break – natychmiast kończy całą pętlę,
  • continue – przerywa bieżącą iterację i przechodzi do następnej.
  • Prosty kalkulator – łączymy wejście, warunki i pętle

    Dobrym ćwiczeniem na utrwalenie dotychczasowych elementów jest mały program, który faktycznie coś robi. Na przykład prosty kalkulator w konsoli:

    while True:
        print("Prosty kalkulator")
        print("1. Dodawanie")
        print("2. Odejmowanie")
        print("3. Mnożenie")
        print("4. Dzielenie")
        print("0. Wyjście")
    
        wybor = input("Wybierz opcję: ")
    
        if wybor == "0":
            print("Do zobaczenia!")
            break
    
        a = float(input("Podaj pierwszą liczbę: "))
        b = float(input("Podaj drugą liczbę: "))
    
        if wybor == "1":
            wynik = a + b
        elif wybor == "2":
            wynik = a - b
        elif wybor == "3":
            wynik = a * b
        elif wybor == "4":
            if b == 0:
                print("Nie dzielimy przez zero!")
                continue
            wynik = a / b
        else:
            print("Nieznana opcja.")
            continue
    
        print(f"Wynik: {wynik}n")

    Taki skrypt spina w całość: pętlę while, warunki if/elif/else, konwersję typów oraz obsługę prostego błędu (dzielenie przez zero). Mit, że „na początku nie da się napisać nic użytecznego”, szybko się rozpada, gdy kilka linijek kodu zaczyna realnie ułatwiać codzienne zadania.

    Praca z danymi: stringi, listy, słowniki i pliki

    Stringi – napisy jako sekwencje znaków

    String w Pythonie to sekwencja znaków. Można go traktować podobnie jak listę – każdy znak ma swój indeks (pozycję):

    tekst = "Python"
    print(tekst[0])  # P
    print(tekst[1])  # y
    print(tekst[-1]) # n (ostatni znak)

    Indeksy liczone są od zera. Ujemne indeksy liczą od końca. Napisy można też „kroić” za pomocą tzw. slicingów:

    tekst = "programowanie w Pythonie"
    print(tekst[0:11])   # 'programowan'
    print(tekst[12:])    # 'w Pythonie'
    print(tekst[:11])    # od początku do indeksu 10
    print(tekst[-8:])    # ostatnie 8 znaków

    Drugi dwukropek w nawiasie steruje krokiem – co ile znaków brać:

    tekst = "0123456789"
    print(tekst[::2])   # '02468'
    print(tekst[1::2])  # '13579'

    Przydatne metody stringów

    Stringi mają wiele wbudowanych metod. Kilka z tych, które przydają się na co dzień:

    napis = "  Witaj w Pythonie!  "
    
    print(napis.lower())      # wszystko małymi literami
    print(napis.upper())      # wszystko wielkimi literami
    print(napis.strip())      # usuwa białe znaki z początku i końca
    print(napis.replace("Pythonie", "programowaniu"))

    Często pojawia się potrzeba podzielenia tekstu po spacji lub innym separatorze:

    linie = "Ala ma kota"
    slowa = linie.split(" ")   # ['Ala', 'ma', 'kota']
    
    csv = "Jan;Kowalski;35"
    pola = csv.split(";")      # ['Jan', 'Kowalski', '35']

    Mit, że „trzeba znać na pamięć dziesiątki metod stringów”, blokuje wielu początkujących. W praktyce wystarcza kilka najczęstszych, reszty szuka się w dokumentacji lub podpowiedziach edytora, kiedy są potrzebne.

    Listy – elastyczne zbiory elementów

    Lista to uporządkowany zbiór elementów, które mogą mieć różne typy. Tworzy się ją za pomocą nawiasów kwadratowych:

    liczby = [10, 20, 30]
    mieszana = [1, "dwa", 3.0, True]
    
    print(liczby[0])  # 10
    print(mieszana[1])  # 'dwa'

    Listy można modyfikować – dodawać elementy, usuwać, zmieniać istniejące:

    zakupy = ["chleb", "mleko", "jajka"]
    zakupy.append("masło")         # dodanie na koniec
    zakupy.insert(1, "pomarańcze") # wstawienie na określoną pozycję
    
    print(zakupy)  # ['chleb', 'pomarańcze', 'mleko', 'jajka', 'masło']
    
    zakupy[0] = "pieczywo"         # zmiana elementu
    print(zakupy)
    
    del zakupy[2]                  # usunięcie elementu po indeksie
    print(zakupy)

    Iterowanie po listach i budowanie ich w pętli

    Po liście przechodzi się pętlą for tak samo jak po stringu:

    imiona = ["Ala", "Bartek", "Celina"]
    
    for imie in imiona:
        print(f"Cześć, {imie}!")

    Listę można też budować krok po kroku, np. zbierając dane od użytkownika:

    uczestnicy = []
    
    while True:
        nazwa = input("Podaj imię uczestnika (puste, aby zakończyć): ")
        if nazwa == "":
            break
        uczestnicy.append(nazwa)
    
    print("Lista uczestników:")
    for osoba in uczestnicy:
        print("-", osoba)

    Wiele osób ma obawę, że „na listach łatwo się pogubić z indeksami”. W praktyce większość przypadków da się rozwiązać iterując bezpośrednio po elementach, a nie po numerach pozycji, co znacznie upraszcza kod.

    List comprehension – skrócony zapis tworzenia list

    Kiedy trzeba wygenerować listę według prostego wzoru, przydaje się tzw. list comprehension:

    kwadraty = [x * x for x in range(1, 11)]
    print(kwadraty)  # [1, 4, 9, ..., 100]

    Można także dodać warunek filtrowania:

    parzyste = [x for x in range(20) if x % 2 == 0]
    print(parzyste)

    W pierwszym kontakcie ta składnia wygląda „magicznie”, ale po kilku użyciach staje się wygodnym skrótem zamiast rozwlekłej pętli.

    Słowniki – dane w kluczu i wartości

    Słownik (dict) to struktura typu „klucz → wartość”. Zamiast indeksów używa się np. tekstowych nazw:

    osoba = {
        "imie": "Jan",
        "nazwisko": "Kowalski",
        "wiek": 35
    }
    
    print(osoba["imie"])   # 'Jan'
    print(osoba["wiek"])   # 35

    Klucze w słowniku muszą być unikalne. Jeśli przypiszesz wartość pod istniejący klucz, nadpiszesz starą:

    Mit kontra rzeczywistość: sporo osób myśli, że jeśli chcą „poważnie” programować, muszą nauczyć się od razu C++ lub Javy, bo to języki „dla profesjonalistów”. W praktyce większość programistów przechodzi w karierze przez kilka języków. Zaczęcie od Pythona nie zamyka żadnych drzwi, a pomaga złapać fundamenty bez zbędnej frustracji. Kiedyś możesz dojść chociażby do bardziej złożonego świata C++, o którym pisze się na takich blogach, jak więcej o informatyka, ale nie ma potrzeby zaczynać od najstromszego podejścia.

    osoba["wiek"] = 36
    osoba["email"] = "jan@example.com"
    
    print(osoba)

    Bezpieczne pobieranie wartości ze słownika

    Gdy nie masz pewności, czy dany klucz istnieje, użyj metody get() z wartością domyślną:

    telefon = osoba.get("telefon", "brak danych")
    print(telefon)

    Standardowy błąd początkujących to odwoływanie się do klucza, którego nie ma, co kończy się KeyError. Metoda get() rozwiązuje to w jednym miejscu i pozwala elegancko zareagować.

    Iterowanie po słowniku

    Słowniki da się przeglądać na kilka sposobów, w zależności od tego, czego potrzebujesz:

    for klucz in osoba:
        print(klucz, "=>", osoba[klucz])
    
    for wartosc in osoba.values():
        print("wartość:", wartosc)
    
    for klucz, wartosc in osoba.items():
        print(klucz, "=>", wartosc)

    Mit, że „słowniki są zaawansowane i dla początkujących za trudne”, nie ma pokrycia w rzeczywistości. To jedna z najprostszych i najbardziej praktycznych struktur danych – świetna np. do reprezentowania pojedynczych rekordów z formularza czy ustawień aplikacji.

    Zagnieżdżone struktury: listy słowników i słowniki list

    Realne dane rzadko są płaskie. Typowy przykład: lista osób, gdzie każda osoba opisana jest słownikiem:

    osoby = [
        {"imie": "Ala", "wiek": 25},
        {"imie": "Bartek", "wiek": 30},
        {"imie": "Celina", "wiek": 28}
    ]
    
    for o in osoby:
        print(f"{o['imie']} ma {o['wiek']} lat.")

    Da się też zrobić słownik, w którym pod jednym kluczem jest lista:

    projekt = {
        "nazwa": "Aplikacja TODO",
        "zadania": ["stworzyć model danych", "napisać API", "zbudować frontend"]
    }
    
    for zadanie in projekt["zadania"]:
        print("-", zadanie)

    Zagnieżdżone struktury na początku wyglądają groźnie, ale schemat jest zawsze ten sam: krok po kroku schodzisz po „poziomach” – najpierw lista, potem słownik, potem np. znowu lista.

    Podstawy pracy z plikami – zapis i odczyt

    Gdy dane mają przetrwać dłużej niż życie procesu programu, trzeba je gdzieś zapisać. Najprostszy sposób to zwykłe pliki tekstowe.

    Do otwierania plików służy funkcja open(). W praktyce najwygodniej używać jej wraz z instrukcją with, która zadba o poprawne zamknięcie pliku:

    with open("dane.txt", "w", encoding="utf-8") as plik:
        plik.write("Linia 1n")
        plik.write("Linia 2n")
  • "w" – tryb zapisu (kasuje poprzednią zawartość pliku),
  • encoding="utf-8" – dzięki temu polskie znaki nie robią niespodzianek.

Do odczytu użyj trybu "r":

with open("dane.txt", "r", encoding="utf-8") as plik:
    zawartosc = plik.read()

print("Plik zawiera:")
print(zawartosc)

Odczyt pliku linia po linii

Przy większych plikach wygodniej przetwarzać dane w kawałkach:

with open("dane.txt", "r", encoding="utf-8") as plik:
    for linia in plik:
        linia = linia.strip()  # usuń znak końca linii
        print("Odczytano:", linia)

Taki sposób sprawdza się np. przy obróbce logów czy listy produktów eksportowanej z innego systemu.

Prosty rejestr zadań zapisany w pliku

Szybkie, praktyczne ćwiczenie: lista zadań typu „to-do”, która po zakończeniu programu nie znika.

NAZWA_PLIKU = "zadania.txt"

def wczytaj_zadania():
    try:
        with open(NAZWA_PLIKU, "r", encoding="utf-8") as plik:
            return [linia.strip() for linia in plik]
    except FileNotFoundError:
        return []

def zapisz_zadania(zadania):
    with open(NAZWA_PLIKU, "w", encoding="utf-8") as plik:
        for z in zadania:
            plik.write(z + "n")

zadania = wczytaj_zadania()

while True:
    print("nTwoje zadania:")
    for i, z in enumerate(zadania, start=1):
        print(f"{i}. {z}")

    print("nMenu:")
    print("1. Dodaj zadanie")
    print("2. Usuń zadanie")
    print("0. Zapisz i wyjdź")

    wybor = input("Wybierz opcję: ")

    if wybor == "1":
        tekst = input("Treść zadania: ")
        if tekst:
            zadania.append(tekst)
    elif wybor == "2":
        nr = int(input("Numer zadania do usunięcia: "))
        if 1 <= nr <= len(zadania):
            del zadania[nr - 1]
        else:
            print("Brak zadania o takim numerze.")
    elif wybor == "0":
        zapisz_zadania(zadania)
        print("Zapisano. Koniec programu.")
        break
    else:
        print("Nieznana opcja.")

Tutaj pojawia się też pierwszy kontakt z obsługą wyjątków (try/except) przy próbie wczytania pliku, który może jeszcze nie istnieć. Zamiast błędu, program startuje z pustą listą zadań.

Dane w formacie CSV – krok w stronę „prawdziwych” danych

CSV (Comma-Separated Values, często z innym separatorem niż przecinek) to jeden z najprostszych formatów wymiany danych. Daje się go otworzyć w Excelu, LibreOffice czy Google Sheets. W Pythonie można to ogarnąć ręcznie, ale wygodniej użyć modułu csv:

import csv

with open("osoby.csv", "w", newline="", encoding="utf-8") as plik:
    writer = csv.writer(plik, delimiter=";")
    writer.writerow(["imie", "nazwisko", "wiek"])
    writer.writerow(["Ala", "Nowak", 25])
    writer.writerow(["Bartek", "Kowalski", 30])

Odczyt pliku CSV do listy słowników:

import csv

osoby = []
with open("osoby.csv", "r", encoding="utf-8") as plik:
    reader = csv.DictReader(plik, delimiter=";")
    for wiersz in reader:
        osoby.append(wiersz)

for o in osoby:
    print(f"{o['imie']} {o['nazwisko']} ({o['wiek']})")

Różnica między „teorią” a „praktyką” jest dobrze widoczna przy formatach danych: na sucho brzmi to groźnie, ale gdy widzisz kilka linijek kodu i efekty w pliku, schemat błyskawicznie staje się zrozumiały.

Podsumowanie robocze: od pojedynczej liczby do mini-aplikacji konsolowej

Na tym etapie można już połączyć wszystkie poznane elementy: pobieranie danych od użytkownika, warunki, pętle, listy, słowniki i zapis do plików. To wystarczy, by zbudować prostą aplikację konsolową: licznik wydatków, mini-książkę adresową czy generator prostych raportów z pliku CSV.

Bibliografia i źródła

  • The Python Tutorial. Python Software Foundation – Oficjalne wprowadzenie do języka Python, składnia i podstawy
  • TIOBE Index for Programming Languages. TIOBE Software BV – Ranking popularności języków programowania, pozycja Pythona
  • Stack Overflow Developer Survey. Stack Exchange Inc. – Dane o popularności Pythona i zastosowaniach wśród programistów
  • Flask User’s Guide. Pallets Projects – Dokumentacja frameworka Flask do tworzenia backendów webowych

Poprzedni artykułPrawnik dla pracodawcy zatrudniającego obcokrajowców – kiedy jednorazowa porada, a kiedy stała obsługa
Agnieszka Michalski
Prawniczka i konsultantka ds. zatrudniania cudzoziemców, od lat współpracująca z działami HR i agencjami pracy. Specjalizuje się w praktycznym stosowaniu przepisów o zezwoleniach na pracę, oświadczeniach i delegowaniu pracowników spoza UE. Przygotowując treści dla Legalis.org.pl, opiera się na codziennej pracy z dokumentacją, kontrolami PIP oraz korespondencją z urzędami wojewódzkimi. Ceni przejrzyste procedury i sprawdzone wzory pism, które testuje w praktyce. Jej artykuły pomagają pracodawcom ograniczać ryzyko sankcji i usprawniać procesy kadrowe.