Nauka Pythona z AI – jak opanować podstawy programowania?
Jakiś czas temu postanowiłem zbudować w moim zespole kompetencje programowania w VBA. Wybrałem jedną osobę, którą przeszkoliłem, żeby mogła mnie wspierać i samodzielnie realizować projekty automatyzujące procesy, a także rozwijać już istniejące rozwiązania. Zrobiłem to w kilku krokach:
- trzydniowe szkolenie online z firmą zewnętrzną,
- delegowanie prostych zadań programistycznych,
- moje wsparcie merytoryczne,
- stopniowo coraz bardziej złożone projekty,
- wykorzystanie AI jako dodatkowej pomocy przy pisaniu kodu,
- w końcu – samodzielny większy projekt: automatyzacja procesu raportowania na podstawie danych z wielu transakcji w SAP.
Efekt? Po kilku miesiącach ta osoba realizowała własne projekty i była dla mnie ogromnym wsparciem. Po roku zrealizowała własny projekt. A trzeba dodać, że programowanie było tylko dodatkiem do jej codziennych obowiązków związanych z planowaniem produkcji.
Dziś chcę „wprowadzić” w programowanie kolejną osobę z zespołu. Tym razem jednak postanowiłem podejść inaczej — zamiast klasycznego szkolenia wykorzystam możliwości, jakie daje technologia AI. Z doświadczenia wiem, że szkolenie daje pewne podstawy teoretyczne, ale prawdziwa nauka i tak dzieje się w praktyce: podczas rozwiązywania problemów i realizacji własnych projektów.
Uważam, że ten pierwszy fundament można spokojnie zbudować z pomocą modeli językowych. Sam najczęściej korzystam z dwóch:
Jestem przekonany, że pieniądze wydane na edukację to zawsze świetna inwestycja. Ale w tym przypadku chciałbym pokazać Ci sposób, w którym jedynym wkładem jest Twój czas, a nie opłacone szkolenie za kilka tysięcy złotych.
Ten wpis to lista promptów do AI, które pomogą każdej początkującej osobie wejść w świat programowania i sprawdzić, czy to „coś dla niej”. To tylko podstawy – ale takie, które pozwalają już samodzielnie poeksperymentować i zbudować fundament pod pierwsze automatyzacje. Dopiero później można wchodzić w bardziej zaawansowane tematy, jak np. klasy. A nauczyciel w postaci czata AI naprawdę sprawdza się tu znakomicie.
Listę promptów, którą za chwilę znajdziesz, ułożyłem tak, by przygotowała Cię do stawiania pierwszych kroków w automatyzacji procesów biznesowych. Nauka Pythona z AI będzie dobrym fundamentem do mojej serii o automatyzacji SAP-a (pojawi się już niebawem na blogu).
Każde zagadnienie to osobny podrozdział. Dołączam też przykładowe odpowiedzi, jakie ja dostałem od Gemini – dla osób, które nie mają możliwości korzystania z AI (np. podczas lotu samolotem). Podkreślam więc, że treść tego wpisu w dużej mierze została wygenerowana przez AI, ale każdą odpowiedź zweryfikowałem.
Zachęcam Cię do samodzielnego użycia tych promptów – po prostu kopiuj je po kolei do wybranego czata. Jeśli będziesz potrzebował dodatkowego wyjaśnienia, wystarczy, że poprosisz o to AI. Twoje odpowiedzi mogą się różnić od moich i to zupełnie normalne – tak działa ta technologia.
Uważam, że takie wykorzystywanie sztucznej inteligencji do nauki programowania od samego początku to cenne doświadczenie — trudno mi obecnie wyobrazić sobie efektywną pracę z kodem bez wsparcia AI.
To dopiero pierwsza część mini serii o nauce programowania z AI. Zaczynam od Pythona, bo to uniwersalny język, który świetnie sprawdza się w automatyzacji i analizie danych, a jednocześnie otwiera drzwi do nowoczesnych rozwiązań. W drugiej części pokażę Ci, jak podejść do nauki VBA z pomocą AI – języka, który wciąż ma ogromne znaczenie w pracy z Excelem i pozwala szybko rozwiązywać codzienne problemy w biznesie. Dzięki temu poznasz dwa różne światy: nowoczesne podejście z Pythonem i bardziej klasyczne – z VBA. A w osobnej serii, która pojawi się później, przejdziemy do SAP-a – czyli automatyzacji procesów biznesowych na większą skalę. Jeśli chcesz możesz rozpocząć naukę od drugiej części tej serii – czyli od VBA (Nauka VBA z AI).
Podstawy techniczne przed startem
Instalacja Pythona
Na początek pobierz najnowszą dostępną wersję ze strony python.org/downloads. Obecnie jest to wersja 3.13.x — i to właśnie ona pojawi się jako pierwsza. Możesz śmiało z niej skorzystać, zwłaszcza jeśli dopiero zaczynasz. Następnie uruchom instalator oraz przejdź przez proces instalacji, który przebiega w sposób standardowy.
Uwaga: Podczas instalacji zaznacz opcję “Add Python to PATH”.
Python jest zainstalowany i gotowy do działania. Masz już wszystko aby przejść dalej. Na początek do edycji skryptu w zupełności wystarczy Notepad++, a nawet systemowy Notatnik. Gdy Twoje projekty staną się bardziej złożone, warto zainteresować się profesjonalnymi edytorami kodu i przygotować środowisko tzw. IDE (ang. Integrated Development Environment). Pozwoli Ci to pracować jeszcze efektywniej.
Jak otwierać pliki Python?
Pliki z kodem Pythona mają rozszerzenie .py. Aby uruchomić taki plik, wystarczy skorzystać z terminala (Wiersz polecenia w Windows lub Terminal w macOS/Linux).
- Otwórz terminal.
- Przejdź do folderu, w którym znajduje się Twój plik
.py, np.:
cd C:\Users\TwojaNazwaUżytkownika\Documents\Python
- Uruchom plik komendą:
python nazwa_pliku.py
Kompilator online – Python w przeglądarce
Jeśli nie chcesz instalować Pythona na komputerze, możesz skorzystać z kompilatora online, np. Programiz Python Compiler albo innego, który łatwo znajdziesz w Google wpisując “python compiler online”. Warto wybrać taki, który umożliwia podstawową pracę z plikami, jak na przykład: trinket.
To świetne rozwiązanie na początek, kiedy chcesz szybko przetestować fragment kodu bez instalacji czegokolwiek.
Pamiętaj jednak, że nie wszystkie lekcje w tym kursie uda Ci się tam zrealizować — np. praca z aplikacjami czy własnym środowiskiem wymaga lokalnej instalacji. Dlatego jeśli chcesz głębiej wejść w programowanie, warto mieć Pythona na komputerze. Lokalna instalacja daje pełną kontrolę nad środowiskiem, pozwala korzystać z edytorów i IDE oraz wygodnie zarządzać bibliotekami i projektami.
Podstawy składni Pythona
Zanim zaczniesz pisać swoje pierwsze programy, warto poznać trzy absolutnie podstawowe elementy składni języka Python: wcięcia, komentarze i zmienne.
Wcięcia (indentation)
W Pythonie wcięcia nie są kwestią estetyki, ale obowiązkową częścią składni.
To one wyznaczają, które linie należą do danego bloku kodu.
Przykład poprawnego użycia wcięć:
for i in range(3):
print("To jest w pętli") # wcięcie oznacza blok pętli
print("To już poza pętlą") # brak wcięcia – linia poza pętlą
Wskazówka: Najczęściej stosuje się 4 spacje jako jedno wcięcie. Mieszanie spacji i tabulatorów może powodować błędy.
Komentarze
Komentarze to fragmenty kodu, które nie są wykonywane przez program – służą wyłącznie do wyjaśniania działania kodu.
- Komentarz jednoliniowy zaczyna się od
#:
# To jest komentarz
print("Hello!") # komentarz po instrukcji
- Komentarz wieloliniowy można napisać w potrójnych cudzysłowach:
"""
To jest dłuższy komentarz,
który zajmuje kilka linii.
"""
Zmienne
W Pythonie nie musisz podawać typu zmiennej – język sam rozpoznaje go na podstawie przypisanej wartości (dynamiczne typowanie).
Przykład:
x = 10 # zmienna typu int (liczba całkowita)
y = 3.14 # zmienna typu float (liczba zmiennoprzecinkowa)
tekst = "Cześć" # zmienna typu string (łańcuch znaków)
print(x, y, tekst)
Warto pamiętać:
- nazwy zmiennych powinny być opisowe (np.
wiek,cena_produktuzamiastx1,abc) - nie mogą zaczynać się od cyfry
- Python rozróżnia wielkość liter (
nazwaiNazwato różne zmienne).
Lekcje Pythona z nauczycielem AI
Od tego momentu zaczynamy właściwą naukę – czyli serię lekcji przygotowanych w formie promptów. Każdy prompt możesz wykorzystać w rozmowie z nauczycielem AI, żeby poznawać nowe zagadnienia i od razu sprawdzać je w praktyce na prostych przykładach i zadaniach.
Żeby było łatwiej się odnaleźć, podzieliłem je na bloki tematyczne:
- Podstawy języka – pierwsze kroki: zmienne, typy danych, proste operacje i pojemniki na dane oraz obsługa błędów.
- Struktury programu – czyli logika działania: pętle, instrukcje warunkowe i własne funkcje.
- Biblioteki i środowisko – jak korzystać z gotowych narzędzi i instalować nowe.
- Automatyzacja danych i plików – od zwykłych plików tekstowych, przez CSV, aż po Excela.
- Mini-projekty – praktyczne automatyzacje, które możesz wykorzystać w codziennych zadaniach.
Dzięki temu nie zgubisz się w gąszczu lekcji i zawsze będziesz wiedzieć, w którym miejscu kursu jesteś.
Prompt 0: ustaw nauczyciela
Zanim zaczniesz naukę Pythona z AI, warto ustawić nauczyciela w odpowiedni tryb. Wykorzystaj do tego poniższy prompt. Został on napisany w taki sposób, aby Sztuczna Inteligencja wiedziała, czego będziesz od niej oczekiwał i czekała cierpliwie na właściwe zagadnienia do nauki.
Prompt 0:
„Chcę, żebyś pełnił rolę mojego nauczyciela Pythona. Będę zadawał Ci pytania w kolejnych promptach. Tłumacz mi zagadnienia prosto i praktycznie, pokazuj krótkie przykłady i zadania do samodzielnego wykonania.”
Prompt 1: Zmienne i typy danych
Prompt 1:
„Wytłumacz mi zmienne w Pythonie. Pokaż przykłady z liczbami, tekstem i listą zakupów.”
Treść lekcji:
Wyobraź sobie, że zmienna to taki podpisany pojemnik, do którego możesz coś włożyć. Zamiast za każdym razem sięgać po samą rzecz, możesz po prostu odwołać się do napisu na pojemniku. W programowaniu „rzeczą”, którą wkładasz do pojemnika, jest jakaś dana (np. liczba, tekst), a „napisem na pojemniku” jest nazwa zmiennej.
W Pythonie tworzenie zmiennej jest banalnie proste. Wystarczy, że wymyślisz nazwę i użyjesz znaku równości (=), żeby przypisać do niej wartość.
nazwa_zmiennej = wartość
Zmienne z liczbami
Możemy przechowywać zarówno liczby całkowite (np. 10), jak i zmiennoprzecinkowe (z częścią ułamkową, np. 3.99).
Przykład:
# Liczba całkowita (integer)
wiek = 25
# Liczba zmiennoprzecinkowa (float)
cena_pizzy = 42.50
# Możemy na nich wykonywać działania matematyczne
za_dwa_lata = wiek + 2
print(wiek)
print(cena_pizzy)
print("Za dwa lata będę miał:", za_dwa_lata)
Wynik działania kodu:
25
42.5
Za dwa lata będę miał: 27
Zmienne z tekstem
Tekst w programowaniu nazywamy stringiem (ang. string) i musimy go umieścić w cudzysłowie " lub apostrofie '.
Przykład:
# Tekst (string)
imie = "Anna"
ulubiony_serial = 'The Office'
# Możemy łączyć teksty (to się nazywa konkatenacja)
powitanie = "Cześć, " + imie + "!"
print(imie)
print(powitanie)
Wynik działania kodu:
Anna
Cześć, Anna!
Zmienna z listą zakupów
Gdy chcesz przechować w jednej zmiennej kilka rzeczy na raz, używasz listy. Listę tworzymy za pomocą nawiasów kwadratowych [], a poszczególne elementy oddzielamy przecinkami. Lista nie jest jedynym „pojemnikiem” na większą ilość danych — ten temat zostanie omówiony szerzej w jednej z kolejnych lekcji.
Przykład:
# Lista (list)
lista_zakupow = ["mleko", "jajka", "chleb", "masło"]
# Możemy sprawdzić, co jest na liście
print("Moja lista zakupów:", lista_zakupow)
# Możemy dodać coś do listy
lista_zakupow.append("ser")
print("Po dodaniu sera:", lista_zakupow)
Wynik działania kodu:
Moja lista zakupów: ['mleko', 'jajka', 'chleb', 'masło']
Po dodaniu sera: ['mleko', 'jajka', 'chleb', 'masło', 'ser']
⭐ Zadanie dla Ciebie
Teraz Twoja kolej! Napisz krótki program, który:
- Stworzy zmienną
moje_imiei przypisze do niej Twoje imię. - Stworzy zmienną
moj_wiekz Twoim wiekiem. - Stworzy zmienną
ulubione_daniai przypisze do niej listę z trzema ulubionymi potrawami. - Na koniec, za pomocą funkcji
print(), wyświetli wszystkie te zmienne w konsoli.
Daj znać, jak Ci poszło, albo pytaj, jeśli coś jest niejasne!
Prompt 2: Operacje na danych
Prompt 2:
„Pokaż jak mogę dodawać i porównywać liczby w Pythonie. Dodaj przykłady na obliczanie średniej wydatków.”
Treść lekcji:
Dodawanie i inne operacje arytmetyczne
W Pythonie używamy intuicyjnych znaków matematycznych.
+do dodawania-do odejmowania*do mnożenia/do dzielenia
Przykład:
liczba1 = 15
liczba2 = 5
suma = liczba1 + liczba2
roznica = liczba1 - liczba2
iloczyn = liczba1 * liczba2
iloraz = liczba1 / liczba2 # Wynik dzielenia to zawsze liczba z ułamkiem (float)
print("Suma:", suma)
print("Różnica:", roznica)
print("Iloczyn:", iloczyn)
print("Iloraz:", iloraz)
Wynik działania kodu:
Suma: 20
Różnica: 10
Iloczyn: 75
Iloraz: 3.0
Porównywanie liczb
Porównywanie zwraca jedną z dwóch wartości: Prawda (True) lub Fałsz (False). To kluczowe przy podejmowaniu decyzji w kodzie (o czym wkrótce).
==czy równe? (dwa znaki równości!)!=czy różne?>czy większe?<czy mniejsze?>=czy większe lub równe?<=czy mniejsze lub równe?
Przykład:
moj_wiek = 30
wiek_kolegi = 32
print("Czy mamy tyle samo lat?", moj_wiek == wiek_kolegi)
print("Czy jestem starszy?", moj_wiek > wiek_kolegi)
print("Czy jestem młodszy lub w tym samym wieku?", moj_wiek <= wiek_kolegi)
Wynik działania kodu:
Czy mamy tyle samo lat? False
Czy jestem starszy? False
Czy jestem młodszy lub w tym samym wieku? True
Przykład: Obliczanie średniej wydatków
Załóżmy, że mamy listę wydatków z całego tygodnia i chcemy obliczyć średni dzienny wydatek.
# Lista z wydatkami na jedzenie od poniedziałku do piątku
wydatki = [45.50, 30.00, 25.00, 62.20, 15.80]
# 1. Obliczamy sumę wszystkich wydatków
suma_wydatkow = sum(wydatki) # sum() to wbudowana funkcja Pythona, która sumuje listę
# 2. Liczymy, ile jest dni (elementów na liście)
liczba_dni = len(wydatki) # len() to funkcja, która zwraca długość listy
# 3. Dzielimy sumę przez liczbę dni, żeby uzyskać średnią
sredni_wydatek = suma_wydatkow / liczba_dni
print("Wydatki w tym tygodniu:", wydatki)
print("Suma wydatków:", suma_wydatkow)
print("Średni dzienny wydatek:", sredni_wydatek)
# Możemy też sprawdzić, czy przekroczyliśmy dzienny budżet
budzet_dzienny = 40.00
print("Czy średnio przekroczyłem budżet?", sredni_wydatek > budzet_dzienny)
Wynik działania kodu:
Wydatki w tym tygodniu: [45.5, 30.0, 25.0, 62.2, 15.8]
Suma wydatków: 178.5
Średni dzienny wydatek: 35.7
Czy średnio przekroczyłem budżet? False
⭐ Zadanie dla Ciebie
- Stwórz listę o nazwie
ocenyz pięcioma dowolnymi ocenami szkolnymi (np.[5, 4, 4, 3, 5]). - Oblicz sumę wszystkich ocen.
- Oblicz średnią arytmetyczną tych ocen.
- Wyświetl obliczoną średnią.
- Dodaj kod, który sprawdzi, czy średnia ocen jest wyższa lub równa 4.0 i wyświetli wynik (
TruelubFalse).
Prompt 3: Pojemniki na dane – lista, krotka, słownik, set
Prompt 3:
„Wytłumacz mi pojemniki danych w Pythonie: listę, krotkę (tuple), słownik (dict) i set. Podaj przykłady, kiedy używać każdego z nich.”
Treść lekcji:
Przejdźmy do różnych "pojemników" na dane w Pythonie. Każdy z nich ma swoje unikalne cechy i najlepiej sprawdza się w innych sytuacjach.
Lista (list)
Wyobraź sobie listę zakupów. Możesz na niej zapisywać produkty w określonej kolejności, a później coś z niej wykreślić lub dopisać na końcu. Lista w Pythonie działa identycznie.
Cechy kluczowe:
- Uporządkowana: Elementy mają swoją kolejność (indeks), która się nie zmienia.
- Zmienna (modyfikowalna): Możesz dodawać, usuwać i zmieniać elementy po jej utworzeniu.
- Dopuszcza duplikaty: Możesz mieć ten sam element wielokrotnie.
Jak wygląda? Używa nawiasów kwadratowych [].
Przykład:
# Lista ulubionych filmów
filmy = ["Incepcja", "Matrix", "Władca Pierścieni"]
print("Początkowa lista:", filmy)
# Dodajemy nowy film na koniec
filmy.append("Interstellar")
print("Po dodaniu:", filmy)
# Zmieniamy drugi element (indeks 1, bo liczymy od 0)
filmy[1] = "Matrix Reaktywacja"
print("Po zmianie:", filmy)
# Usuwamy element
filmy.remove("Incepcja")
print("Po usunięciu:", filmy)
Kiedy używać? Gdy potrzebujesz uporządkowanej kolekcji danych, którą będziesz modyfikować. Idealna do przechowywania listy zadań, wyników pomiarów, użytkowników w kolejce itp.
Krotka (tuple)
Krotka jest jak zapieczętowane, przezroczyste pudełko. Widzisz, co jest w środku i w jakiej kolejności, ale po zamknięciu nie możesz niczego zmienić – ani dodać, ani usunąć, ani podmienić.
Cechy kluczowe:
- Uporządkowana: Elementy mają stałą kolejność.
- Niezmienna (niemodyfikowalna): Nie można jej zmienić po utworzeniu.
- Dopuszcza duplikaty.
Jak wygląda? Używa nawiasów okrągłych ().
Przykład:
# Krotka przechowująca współrzędne geograficzne
wspolrzedne_warszawy = (52.2297, 21.0122)
print("Współrzędne:", wspolrzedne_warszawy)
# Możemy odczytać wartość
print("Szerokość geograficzna:", wspolrzedne_warszawy[0])
# Próba zmiany zakończy się błędem!
# wspolrzedne_warszawy[0] = 52.23
# -> TypeError: 'tuple' object does not support item assignment
Kiedy używać? Gdy chcesz mieć pewność, że dane pozostaną niezmienione. Idealna do przechowywania stałych wartości, jak współrzędne, kolory RGB (255, 0, 0), dane dostępowe, które nie powinny być przypadkowo zmodyfikowane.
Słownik (dict)
Słownik działa jak prawdziwy słownik lub książka telefoniczna. Nie szukasz w nim po numerze strony (indeksie), ale po haśle (kluczu), żeby znaleźć definicję (wartość).
Cechy kluczowe:
- Pary klucz-wartość: Każdy element to para
klucz: wartość. - Klucze są unikalne: Nie mogą się powtarzać.
- Zmienny (modyfikowalny): Możesz dodawać, usuwać i zmieniać pary.
- Nieuporządkowany (w starszych wersjach Pythona): Nie polegaj na kolejności elementów (choć w nowszych wersjach zachowuje kolejność wstawiania).
Jak wygląda? Używa nawiasów klamrowych {} z parami klucz: wartość.
Przykład:
# Słownik opisujący osobę
osoba = {
"imie": "Jan",
"wiek": 30,
"miasto": "Kraków"
}
print("Dane osoby:", osoba)
# Odczytujemy wartość po kluczu
print("Wiek:", osoba["wiek"])
# Dodajemy nową parę klucz-wartość
osoba["zawod"] = "programista"
print("Po dodaniu zawodu:", osoba)
# Zmieniamy istniejącą wartość
osoba["miasto"] = "Warszawa"
print("Po zmianie miasta:", osoba)
Kiedy używać? Gdy chcesz przechowywać dane, które mają logiczne powiązania w parach. Idealny do opisywania obiektów (użytkownik, produkt, samochód), przechowywania ustawień, zliczania wystąpień elementów.
Zbiór (set)
Zbiór jest jak worek z unikalnymi etykietami. Możesz do niego wrzucać kolejne etykiety, ale jeśli wrzucisz taką, która już tam jest, nic się nie zmieni. Kolejność w worku nie ma znaczenia.
Cechy kluczowe:
- Nieuporządkowany: Elementy nie mają określonej kolejności.
- Unikalne elementy: Nie dopuszcza duplikatów.
- Zmienny (modyfikowalny): Możesz dodawać i usuwać elementy.
Jak wygląda? Używa nawiasów klamrowych {} (ale bez par klucz-wartość).
Przykład:
# Zbiór tagów do artykułu
tagi = {"python", "programowanie", "nauka", "dane"}
print("Początkowe tagi:", tagi)
# Dodanie istniejącego taga nic nie zmienia
tagi.add("python")
print("Po próbie dodania duplikatu:", tagi)
# Dodanie nowego taga
tagi.add("AI")
print("Po dodaniu nowego taga:", tagi)
# Można szybko sprawdzić, czy element istnieje w zbiorze
print("Czy tag 'python' istnieje?", "python" in tagi)
Kiedy używać? Gdy najważniejsza jest dla Ciebie unikalność elementów i szybkie sprawdzanie przynależności. Idealny do usuwania duplikatów z listy, przechowywania unikalnych ID użytkowników, którzy polubili post, czy znajdowania części wspólnej dwóch zbiorów.
⭐ Zadanie dla Ciebie
Wyobraź sobie, że tworzysz prosty system do zarządzania przepisami kulinarnymi.
- Stwórz listę o nazwie
skladnikizawierającą składniki na jajecznicę (np. "jajka", "masło", "sól", "pieprz"). - Stwórz słownik o nazwie
przepis, który będzie zawierał następujące klucze i wartości:nazwa: "Jajecznica"czas_przygotowania: 10 (jako liczba)trudnosc: "łatwy"
- Wyświetl listę składników i cały słownik z przepisem.
Prompt 4: Obsługa błędów try/except
Prompt 4:
„Wytłumacz jak działa try/except. Pokaż mi proste przykłady, np. obsługa błędu przy otwieraniu pliku, dzieleniu przez zero. Wyjaśnij też, dlaczego obsługa błędów jest tak ważna w automatyzacji.”
Treść lekcji:
Obsługa błędów, czyli try...except, to mechanizm obronny Twojego programu. Pozwala on przygotować się na potencjalne problemy i zareagować na nie w kontrolowany sposób, zamiast pozwolić, by cały program się "wysypał".
Wyobraź sobie, że Twój kod to plan A. Blok try...except to stworzenie planu B, na wypadek gdyby plan A zawiódł.
Podstawowa składnia:
try:
# 📝 Tutaj umieszczasz "ryzykowny" kod,
# który może spowodować błąd (tzw. wyjątek).
# To jest Twój plan A.
except TypBledu:
# 🛡️ Ten blok wykona się TYLKO WTEDY,
# gdy w bloku 'try' wystąpi błąd określonego typu.
# To jest Twój plan B.
Przykład 1: Dzielenie przez zero 💣
Dzielenie przez zero jest w matematyce niemożliwe i w Pythonie powoduje błąd ZeroDivisionError. Zobaczmy, jak go "złapać".
licznik = 10
mianownik = 0
try:
print("Próbuję wykonać dzielenie...")
wynik = licznik / mianownik
print("Wynik to:", wynik) # Ta linijka się nigdy nie wykona
except ZeroDivisionError:
# Zamiast czerwonego komunikatu błędu, program wykona ten kod
print("Wystąpił błąd! Nie można dzielić przez zero.")
print("Program działa dalej, nie zatrzymał się.")
Wynik działania kodu:
Próbuję wykonać dzielenie…
Wystąpił błąd! Nie można dzielić przez zero.
Program działa dalej, nie zatrzymał się.
Bez try...except program po prostu by się zatrzymał, wyświetlając błąd. Dzięki obsłudze błędu, program "wie", co robić w tej awaryjnej sytuacji i może kontynuować działanie.
Przykład 2: Otwieranie nieistniejącego pliku
Bardzo częsty problem: program próbuje odczytać plik, którego nie ma w danej lokalizacji. Powoduje to błąd FileNotFoundError.
nazwa_pliku = "nieistniejace_dane.txt"
try:
print(f"Próbuję otworzyć plik o nazwie: {nazwa_pliku}")
with open(nazwa_pliku, 'r') as plik:
zawartosc = plik.read()
print("Plik został wczytany pomyślnie.")
except FileNotFoundError:
# Złapaliśmy konkretny błąd i informujemy o nim użytkownika
print(f"Błąd: Plik '{nazwa_pliku}' nie został znaleziony!")
# Możemy tu np. stworzyć pusty plik albo użyć domyślnych danych
print("Koniec programu.")
Wynik działania kodu:
Próbuję otworzyć plik o nazwie: nieistniejace_dane.txt
Błąd: Plik 'nieistniejace_dane.txt' nie został znaleziony!
Koniec programu.
Dlaczego obsługa błędów jest kluczowa w automatyzacji?
Automatyzacja polega na tworzeniu skryptów, które działają samodzielnie, często bez nadzoru człowieka (np. w nocy, na serwerze). Wyobraź sobie skrypt, który ma przetworzyć 1000 plików i wysłać raport.
- Bez obsługi błędów: Jeśli przy 5. pliku wystąpi problem (np. plik będzie uszkodzony albo zabraknie do niego dostępu), cały skrypt natychmiast się zatrzyma. Pozostałe 995 plików nie zostanie przetworzonych, a Ty rano zastaniesz niedokończoną pracę i będziesz musiał szukać przyczyny.
- Z obsługą błędów: Możesz zaprogramować skrypt tak, aby w bloku
trypróbował przetworzyć plik. W blokuexceptmożesz obsłużyć ewentualny błąd, np. zapisać informację o problemie do specjalnego pliku z logami i... kontynuować pracę z następnym plikiem! Rano masz przetworzone 999 plików i czytelny raport o tym, który jeden plik sprawił problemy.
Krótko mówiąc, try...except zamienia kruchy i nieprzewidywalny program w solidne i niezawodne narzędzie. Pozwala Twojemu automatowi radzić sobie z nieidealną rzeczywistością.
⭐ Zadanie dla Ciebie
Napisz program, który prosi użytkownika o podanie swojego wieku.
- Umieść pobieranie danych (
input()) i konwersję na liczbę (int()) w blokutry. Pamiętaj, żeinput()zawsze zwraca tekst! - Użytkownik może wpisać tekst zamiast liczby (np. "piętnaście"), co spowoduje błąd
ValueErrorpodczas próby konwersjiint(). - Dodaj blok
except ValueError, który w razie problemu wyświetli komunikat: "Proszę podać wiek jako liczbę!". - Niezależnie od wyniku, na końcu programu wyświetl komunikat "Miłego dnia!".
Przetestuj program, podając raz poprawną liczbę, a raz tekst. Zobacz, jak się zachowa w obu przypadkach.
Prompt 5: Pętle i instrukcje warunkowe
Prompt 5:
„Wytłumacz jak działa pętla for i instrukcja if w Pythonie. Pokaż przykład programu, który liczy wydatki większe niż 100 zł.”
Treść lekcji:
Przejdźmy do sterowania przepływem programu. To dzięki pętlom i instrukcjom warunkowym programy potrafią robić coś więcej niż tylko wykonywać instrukcje jedna po drugiej.
Pętla for
Pętla for służy do przechodzenia po kolei po wszystkich elementach z jakiegoś zbioru (np. po wszystkich produktach na liście zakupów).
Wyobraź sobie, że masz listę i chcesz zrobić coś z każdym jej elementem. Zamiast pisać tę samą komendę dla pierwszego, drugiego, trzeciego elementu itd., mówisz Pythonowi: "dla każdego elementu na tej liście, zrób to i to".
Podstawowa składnia:
for element in lista:
# Blok kodu, który wykona się dla każdego elementu
# WAŻNE: Musi tu być wcięcie (4 spacje lub 1 tab)!
print(element)
Przykład:
owoce = ["jabłko", "banan", "wiśnia"]
for owoc in owoce:
print("Teraz jem:", owoc)
Wynik działania kodu:
Teraz jem: jabłko
Teraz jem: banan
Teraz jem: wiśnia
Python po kolei przypisał każdy element z listy owoce do tymczasowej zmiennej owoc i dla każdego z nich wykonał polecenie print().
Instrukcja warunkowa if..else
Instrukcja warunkowa if...else pozwala Twojemu programowi podejmować decyzje. Działa jak rozwidlenie dróg.
Mówiąc prosto: if mówi: „JEŻELI ten warunek jest prawdziwy, to zrób to...”, a else dodaje: „...W PRZECIWNYM RAZIE zrób coś innego”.
Podstawowa składnia:
if jakiś_warunek:
# Ten kod wykona się, jeśli warunek jest prawdziwy
# (też musi być wcięcie)
else:
# Ten kod wykona się, jeśli warunek jest fałszywy
# (również wcięcie)
Przykład:
wiek = 20
if wiek >= 18:
print("Jesteś osobą dorosłą.")
else:
print("Jesteś osobą niepełnoletnią.")
Wynik działania:
Jesteś osobą dorosłą.
Co się stało?
- Python sprawdził warunek:
wiek >= 18(czy 20 jest większe lub równe 18?). - Warunek okazał się prawdziwy (
True), więc Python wykonał kod w blokuif. - Blok
elsezostał całkowicie zignorowany.
Gdyby wiek wynosił 15, warunek byłby fałszywy (False), a program wykonałby kod z bloku else.
Przykład: Liczenie dużych wydatków
Połączmy teraz pętlę for i instrukcję if, aby rozwiązać konkretny problem. Mamy listę wydatków i chcemy zsumować tylko te, które przekroczyły 100 zł.
Krok po kroku:
- Tworzymy listę z wydatkami.
- Tworzymy zmienną
suma_duzych_wydatkowz początkową wartością 0. Będziemy w niej przechowywać naszą sumę. - Używamy pętli
for, aby przejrzeć każdy wydatek na liście. - Wewnątrz pętli, dla każdego wydatku, używamy instrukcji
if, aby sprawdzić, czy jest on większy niż 100. - Jeśli tak, dodajemy jego wartość do naszej sumy.
- Po zakończeniu pętli wyświetlamy wynik.
Kod programu:
wydatki = [50.50, 120.00, 80.00, 25.00, 155.70, 99.90, 210.00]
suma_duzych_wydatkow = 0
print("Analizuję wydatki:", wydatki)
# Pętla 'for' przechodzi po każdym elemencie listy 'wydatki'
for pojedynczy_wydatek in wydatki:
# Instrukcja 'if' sprawdza warunek dla bieżącego elementu
if pojedynczy_wydatek > 100:
print("Znalazłem duży wydatek:", pojedynczy_wydatek)
suma_duzych_wydatkow = suma_duzych_wydatkow + pojedynczy_wydatek
print("\nSuma wydatków większych niż 100 zł:", suma_duzych_wydatkow)
Wskazówka: Wyrażenie suma_duzych_wydatkow = suma_duzych_wydatkow + pojedynczy_wydatek możesz zapisać prościej, skracając je do: suma_duzych_wydatkow += pojedynczy_wydatek. Jest to tzw. operator złożonego przypisania i możesz go używać również z innymi działaniami, np.:
x /= y (to samo co x = x / y)
x -= y (to samo co x = x - y)
x *= y (to samo co x = x * y)
Wynik działania kodu:
Analizuję wydatki: [50.5, 120.0, 80.0, 25.0, 155.7, 99.9, 210.0]
Znalazłem duży wydatek: 120.0
Znalazłem duży wydatek: 155.7
Znalazłem duży wydatek: 210.0
Suma wydatków większych niż 100 zł: 485.7
⭐ Zadanie dla Ciebie
Masz listę liczb całkowitych: liczby = [1, 6, 11, 14, 23, 28, 30, 35, 42]. Napisz program, który:
- Stworzy zmienną
licznik_parzystychi ustawi jej wartość na 0. - Użyje pętli
fordo przejrzenia wszystkich liczb na liście. - Wewnątrz pętli, za pomocą
if, sprawdzi, czy dana liczba jest parzysta.- Wskazówka: Liczba jest parzysta, jeśli reszta z jej dzielenia przez 2 wynosi 0. W Pythonie resztę z dzielenia obliczamy za pomocą operatora
%(np.5 % 2to1, a4 % 2to0).
- Wskazówka: Liczba jest parzysta, jeśli reszta z jej dzielenia przez 2 wynosi 0. W Pythonie resztę z dzielenia obliczamy za pomocą operatora
- Jeśli liczba jest parzysta, zwiększy
licznik_parzystycho 1. - Po zakończeniu pętli wyświetli, ile liczb parzystych znaleziono.
Prompt 6: Funkcje – czyli własne mini-programy
Prompt 6:
„Pokaż jak napisać prostą funkcję w Pythonie, np. do przeliczania euro na złotówki.”
Treść lekcji:
Funkcje to jeden z najważniejszych konceptów w programowaniu i fundament nauki Pythona dla początkujących. Dzięki nim możesz w prosty sposób uporządkować kod i nauczyć się automatyzacji zadań w Pythonie.
Funkcja to wydzielony fragment kodu, który ma swoją nazwę i wykonuje określone zadanie. Możesz myśleć o niej jak o mini-programie lub specjalistycznym narzędziu, którego możesz używać wielokrotnie, podając mu tylko potrzebne dane.
Główne zalety funkcji:
- Reużywalność: Piszesz kod raz, a używasz go w wielu miejscach.
- Organizacja: Dzielisz duży program na mniejsze, logiczne i łatwiejsze do zarządzania części.
Jak zbudować funkcję?
Struktura funkcji w Pythonie jest bardzo prosta.
- Zaczynasz od słowa kluczowego
def(od "define" - definiuj). - Podajesz nazwę funkcji (np.
przelicz_walute). - W nawiasach
()podajesz parametry, czyli dane, które funkcja przyjmuje do swojego działania (dane wejściowe). - Kończysz linię dwukropkiem
:. - W kolejnych, wciętych liniach piszesz ciało funkcji, czyli kod, który ma się wykonać.
- Na końcu używasz słowa kluczowego
return, aby funkcja "zwróciła" wynik swojej pracy (dane wyjściowe).
def nazwa_funkcji(parametr1, parametr2):
# Ciało funkcji - wykonuje jakieś obliczenia
wynik = parametr1 + parametr2
return wynik
Przykład: Przeliczanie euro na złotówki
Stwórzmy funkcję, która przyjmie kwotę w euro i przeliczy ją na złotówki po stałym kursie.
# Definicja naszej funkcji
def przelicz_na_pln(kwota_eur):
"""
Przelicza podaną kwotę z euro na złotówki.
Przyjmuje stały kurs EUR = 4.32 PLN.
"""
kurs_eur = 4.32 # Przyjmujemy stały kurs wewnątrz funkcji
kwota_pln = kwota_eur * kurs_eur
return kwota_pln
# --- Użycie funkcji ---
# Wywołujemy funkcję z kwotą 100 euro
wynik1 = przelicz_na_pln(100)
print(f"100 euro to {wynik1:.2f} zł")
# Możemy jej użyć ponownie dla innej kwoty
wynik2 = przelicz_na_pln(25.50)
print(f"25.50 euro to {wynik2:.2f} zł")
Dobrym zwyczajem jest dodawanie tzw. docstring (tekst w potrójnym cudzysłowie """...""") na początku funkcji, który opisuje, co ona robi.
Wynik działania kodu:
100 euro to 432.00 zł
25.50 euro to 110.16 zł
Lepsza wersja funkcji
Co jeśli kurs się zmieni? Lepiej przekazywać go jako drugi parametr, dzięki czemu nasza funkcja będzie bardziej elastyczna.
def przelicz_na_pln_v2(kwota_eur, kurs):
"""Przelicza kwotę z euro na PLN używając podanego kursu."""
return kwota_eur * kurs
# Użycie ulepszonej funkcji
aktualny_kurs = 4.35
kwota_do_przeliczenia = 150
wartosc_w_pln = przelicz_na_pln_v2(kwota_do_przeliczenia, aktualny_kurs)
print(f"{kwota_do_przeliczenia} euro po kursie {aktualny_kurs} to {wartosc_w_pln:.2f} zł")
150 euro po kursie 4.35 to 652.50 zł
⭐ Zadanie dla Ciebie
Napisz funkcję o nazwie oblicz_brutto, która będzie obliczać wartość brutto na podstawie wartości netto i stawki VAT.
- Funkcja powinna przyjmować dwa parametry:
kwota_nettoorazstawka_vat. - Wewnątrz funkcji oblicz wartość brutto według wzoru:
brutto = netto * (1 + vat). - Funkcja powinna zwracać (
return) obliczoną kwotę brutto. - Wskazówka: Pamiętaj, aby stawkę VAT podawać w formie ułamka dziesiętnego (np. 23% to
0.23).
Przetestuj swoją funkcję, wywołując ją np. tak: cena_produktu = oblicz_brutto(100, 0.23) i wyświetl wynik.
Prompt 7: Importowanie bibliotek
Prompt 7:
„Wyjaśnij jak działa importowanie bibliotek. Pokaż różnicę między biblioteką wbudowaną a zewnętrzną. Użyj przykładów z bibliotek
mathirandom.”
Treść lekcji:
Importowanie bibliotek to włączanie do swojego programu gotowych zestawów narzędzi (funkcji, klas, stałych), które ktoś inny już napisał. Zamiast budować wszystko od zera, możesz użyć gotowych, sprawdzonych rozwiązań do bardziej zaawansowanych zadań.
Wyobraź sobie, że Python to warsztat. Masz w nim podstawowe narzędzia, jak młotek (print()) czy śrubokręt (len()). Ale gdy chcesz policzyć pierwiastek, potrzebujesz specjalistycznego kalkulatora. Importowanie biblioteki jest jak sięgnięcie po ten kalkulator z półki.
Biblioteka wbudowana vs. zewnętrzna
Podstawowa różnica polega na tym, skąd pochodzą i jak je uzyskujemy.
📚 Biblioteka wbudowana (Built-in)
Jest częścią standardowej instalacji Pythona. To narzędzia, które zawsze są dostępne w Twoim warsztacie, leżą na półce i wystarczy po nie sięgnąć za pomocą polecenia import. Nie musisz niczego dodatkowo instalować.
Przykłady: math, random, datetime, os.
🌍 Biblioteka zewnętrzna (External / Third-party)
To narzędzia stworzone przez społeczność programistów, które nie są częścią standardowej instalacji Pythona. Trzeba je najpierw "kupić i przynieść do warsztatu", czyli zainstalować za pomocą menedżera pakietów pip. Dopiero po instalacji można ich używać tak samo, jak bibliotek wbudowanych.
Instalacja:
pip install nazwa_biblioteki
Przykłady: requests (do komunikacji z internetem), pandas (do analizy danych), matplotlib (do tworzenia wykresów).
Sposoby importowania i przykłady
Użyjmy bibliotek math i random, które są bibliotekami wbudowanymi.
Sposób 1: Importowanie całej biblioteki
To najczęstszy i najbardziej czytelny sposób. Używamy słowa kluczowego import.
# Importujemy całą bibliotekę "math"
import math
# Aby użyć funkcji, musimy podać nazwę biblioteki i po kropce nazwę funkcji
pierwiastek = math.sqrt(16) # Oblicza pierwiastek kwadratowy
print(f"Pierwiastek z 16 to: {pierwiastek}")
# Biblioteki mogą zawierać też stałe, np. liczbę Pi
obwod_kola = 2 * math.pi * 10 # promień = 10
print(f"Obwód koła o promieniu 10 wynosi: {obwod_kola}")
Wynik:
Pierwiastek z 16 to: 4.0
Obwód koła o promieniu 10 wynosi: 62.83185307179586
Sposób 2: Importowanie konkretnej funkcji
Gdy potrzebujesz tylko jednego lub kilku narzędzi z całej biblioteki, możesz zaimportować je bezpośrednio za pomocą składni from ... import ....
# Z biblioteki "random" importujemy tylko funkcję "randint"
from random import randint
# Teraz możemy używać funkcji bezpośrednio, bez pisania "random."
losowa_liczba = randint(1, 10) # Losuje liczbę całkowitą od 1 do 10 włącznie
print(f"Wylosowana liczba to: {losowa_liczba}")
Można też zaimportować kilka funkcji naraz.
# Z biblioteki "random" importujemy funkcje "choice" i "shuffle"
from random import choice, shuffle
owoce = ["jabłko", "banan", "gruszka"]
# choice wybiera losowy element z listy
losowy_owoc = choice(owoce)
print(f"Losowy owoc: {losowy_owoc}")
# shuffle miesza elementy na liście (modyfikuje oryginalną listę)
shuffle(owoce)
print(f"Pomieszane owoce: {owoce}")
Sposób 3: Importowanie z aliasem (skrótem)
Czasem nazwy bibliotek są długie. Można nadać im krótszy pseudonim (alias) za pomocą słowa as.
import random as rnd # Nadajemy bibliotece "random" skrót "rnd"
rzut_kostka = rnd.randint(1, 6)
print(f"Wynik rzutu kostką: {rzut_kostka}")
⭐ Zadanie dla Ciebie
Napisz program, który:
- Zaimportuje bibliotekę
random. - Stworzy listę z kilkoma Twoimi ulubionymi filmami, np.
filmy = ["Film A", "Film B", "Film C"]. - Użyje funkcji z biblioteki
random, aby wybrać i wypisać na ekranie jeden losowy film z tej listy, który obejrzysz dzisiaj wieczorem.
Wskazówka: Przypomnij sobie funkcję choice z przykładu powyżej. Powodzenia!
Prompt 8: Instalowanie bibliotek i środowisko (pip, venv)
Prompt 8:
„Naucz mnie jak instalować dodatkowe biblioteki w Pythonie. Wytłumacz co to jest pip i pokaż przykład instalacji lekkiej biblioteki (np.
emojilubcolorama). Pokaż prosty przykład jej użycia w kodzie. Wytłumacz krótko, czym jest wirtualne środowisko (venv) i dlaczego warto go używać.”
Treść lekcji:
Wytłumaczę Ci to krok po kroku. Instalowanie dodatkowych bibliotek to jedna z największych zalet Pythona!
Co to jest pip?
pip to menedżer pakietów dla Pythona. Najprościej mówiąc, to takie App Store lub Sklep Google Play dla programistów Pythona.
Gdy potrzebujesz jakiejś funkcjonalności, której nie ma w standardowym Pythonie (np. kolorowania tekstu, tworzenia wykresów, wysyłania zapytań do internetu), jest duża szansa, że ktoś już napisał do tego bibliotekę. pip to narzędzie wiersza poleceń, które łączy się z internetowym repozytorium o nazwie PyPI (Python Package Index), pobiera stamtąd kod biblioteki i instaluje go na Twoim komputerze.
pip jest automatycznie instalowany razem z nowszymi wersjami Pythona, więc prawdopodobnie już go masz.
Jak instalować biblioteki – przykład z colorama
Instalacja jest bardzo prosta. Używamy polecenia pip install w terminalu systemowym (a nie w interaktywnym interpreterze Pythona).
1. Otwórz terminal:
- Windows: W menu Start wpisz
cmdlubPowerShell. - macOS/Linux: Otwórz aplikację Terminal.
2. Wpisz polecenie instalacji: Chcemy zainstalować lekką bibliotekę colorama, która pozwala dodawać kolory do tekstu w terminalu.
pip install colorama
Po wciśnięciu Enter zobaczysz, jak pip pobiera i instaluje pakiet.
3. Użyj biblioteki w kodzie: Teraz, gdy biblioteka jest zainstalowana, możesz jej użyć w swoim skrypcie Pythona. Utwórz plik .py i wklej ten kod:
# Importujemy potrzebne elementy z biblioteki colorama
from colorama import Fore, Style, init
# Inicjalizujemy coloramę (ważne dla poprawnego działania w Windows)
# autoreset=True sprawia, że kolor resetuje się po każdym print()
init(autoreset=True)
print("To jest zwykły tekst.")
print(Fore.GREEN + "A to jest tekst zielony!")
print(Fore.YELLOW + "Ten tekst jest żółty i pogrubiony." + Style.BRIGHT)
print(Fore.RED + "Uwaga, niebezpieczeństwo!")
print("I znowu wracamy do zwykłego tekstu.")
Wynik w terminalu: Tekst w Twoim terminalu będzie teraz pokolorowany, co udowadnia, że biblioteka działa poprawnie.
Czym jest wirtualne środowisko (venv) i dlaczego jest tak ważne?
Wyobraź sobie, że pracujesz nad dwoma różnymi projektami.
- Projekt A (stara aplikacja) wymaga biblioteki
requestsw wersji1.5. - Projekt B (nowa strona WWW) wymaga tej samej biblioteki
requests, ale w najnowszej wersji2.8.
Jeśli zainstalujesz obie wersje globalnie (na całym komputerze), będą ze sobą w konflikcie. Jedna nadpisze drugą i któryś z projektów przestanie działać.
Wirtualne środowisko (venv) to izolowany folder dla Twojego projektu, który zawiera osobną instalację Pythona i własny zestaw bibliotek.
Dzięki venv możesz stworzyć "osobne pudełko" dla każdego projektu. W pudełku dla Projektu A instalujesz requests w wersji 1.5, a w pudełku dla Projektu B instalujesz wersję 2.8. Oba projekty działają bez konfliktów, a Twój główny, systemowy Python pozostaje czysty.
Główne zalety używania venv:
- ✅ Izolacja: Biblioteki jednego projektu nie wpływają na inne.
- ✅ Zarządzanie zależnościami: Każdy projekt ma dokładnie te wersje bibliotek, których potrzebuje.
- ✅ Odtwarzalność: Możesz łatwo udostępnić swój projekt komuś innemu wraz z listą potrzebnych pakietów, a on odtworzy identyczne środowisko.
- ✅ Czystość: Nie zaśmiecasz globalnej instalacji Pythona.
Jak używać venv w praktyce?
- Stwórz środowisko (w terminalu, w folderze projektu - do folderu projektu możesz przejść za pomocą komendy cd - tak, jak pokazałem w rozdziale o otwieraniu plików Pythona na początku tego wpisu):
- Stwórz środowisko (w terminalu, w folderze projektu - do folderu projektu możesz przejść za pomocą komendy cd - tak, jak pokazałem w rozdziale o otwieraniu plików Pythona na początku tego wpisu):
python -m venv moje_srodowisko(To stworzy foldermoje_srodowisko) - Aktywuj środowisko:
- Windows:
moje_srodowisko\Scripts\activate - macOS/Linux:
source moje_srodowisko/bin/activate(Zauważysz, że nazwa środowiska pojawi się na początku wiersza poleceń - tzn. jest ono aktywne)
- Windows:
- Instaluj biblioteki:
install colorama(Terazcoloramazostanie zainstalowana tylko wmoje_srodowisko) - Pracuj nad kodem.
- Dezaktywuj środowisko, gdy skończysz pracę:
deactivate
Zawsze używaj wirtualnych środowisk – to profesjonalny standard pracy z Pythonem!
⭐ Zadanie dla Ciebie
- Stwórz nowy folder dla małego projektu.
- W tym folderze utwórz i aktywuj wirtualne środowisko.
- Zainstaluj w nim bibliotekę
emoji(pip install emoji). - Napisz krótki skrypt, który zaimportuje tę bibliotekę i wypisze na ekranie zdanie zawierające co najmniej jedno emoji, np. "Uczę się Pythona 👍". Użyj funkcji
emoji.emojize().
Prompt 9: Praca z plikami i folderami
Prompt 9:
„Naucz mnie podstaw pracy z plikami i folderami. Pokaż jak sprawdzić, czy plik istnieje, jak go otworzyć i odczytać jego zawartość (używając także konstrukcji
with). Pokaż też, jak przejść po wszystkich plikach w folderze używając bibliotekipathlib.”
Treść lekcji:
Obsługa plików i folderów to fundament wielu programów, zwłaszcza w automatyzacji. Pokażę Ci, jak to robić w nowoczesny i wygodny sposób przy użyciu biblioteki pathlib.
Biblioteka pathlib jest wbudowana w Pythona i pozwala traktować ścieżki do plików i folderów jak obiekty, na których można wykonywać różne operacje. To znacznie czytelniejsze niż praca na zwykłych tekstach (stringach).
Na początek musimy zaimportować główną klasę Path z tej biblioteki.
from pathlib import Path
Sprawdzanie, czy plik lub folder istnieje
Zanim spróbujesz coś odczytać lub zapisać, zawsze warto sprawdzić, czy dany plik lub folder w ogóle istnieje.
Do reprezentowania ścieżki tworzymy obiekt Path, podając ją w nawiasie. Następnie na tym obiekcie wywołujemy odpowiednie metody.
sciezka.exists()– sprawdza, czy cokolwiek (plik lub folder) pod daną ścieżką istnieje.sciezka.is_file()– sprawdza, czy jest to plik.sciezka.is_dir()– sprawdza, czy jest to folder (katalog).
Przykład:
# Tworzymy obiekt reprezentujący ścieżkę do pliku
sciezka_do_pliku = Path("moje_dane.txt")
if sciezka_do_pliku.exists():
print(f"✅ Plik '{sciezka_do_pliku}' istnieje!")
else:
print(f"❌ Plik '{sciezka_do_pliku}' nie został znaleziony.")
# Możemy też sprawdzić ścieżkę do folderu
sciezka_do_folderu = Path("dokumenty/")
if sciezka_do_folderu.is_dir():
print(f"✅ Folder '{sciezka_do_folderu}' istnieje.")
else:
print(f"❌ Folder '{sciezka_do_folderu}' nie istnieje.")
Otwieranie i odczytywanie zawartości pliku
Jeśli plik istnieje, odczytanie go z pathlib jest banalnie proste. Używamy metody .read_text().
Ważne: Zawsze dodawaj encoding='utf-8', aby poprawnie odczytywać polskie znaki (ą, ę, ł, itd.).
Przykład: Załóżmy, że masz plik moje_dane.txt o następującej treści:
Witaj na toThePyPoint.pl!
Znajdziesz tutaj treści o automatyzowaniu procesów biznesowych.
Kod w Pythonie:
sciezka_do_pliku = Path("moje_dane.txt")
# Najpierw upewnijmy się, że plik istnieje i jest plikiem
if sciezka_do_pliku.is_file():
try:
# Odczytujemy całą zawartość pliku do jednej zmiennej
zawartosc = sciezka_do_pliku.read_text(encoding='utf-8')
print("--- Zawartość pliku ---")
print(zawartosc)
except Exception as e:
print(f"Wystąpił błąd podczas odczytu pliku: {e}")
else:
print("Nie można odczytać, ponieważ plik nie istnieje.")
Wynik działania kodu:
--- Zawartość pliku ---
Witaj na toThePyPoint.pl!
Znajdziesz tutaj treści o automatyzowaniu procesów biznesowych.
Gdy pliki są bardzo duże, wczytywanie całej zawartości na raz może być nieefektywne. Wtedy lepiej jest przetwarzać plik linijka po linijce. W takim przypadku świetnie sprawdzi się użycie konstrukcji with, która automatycznie zamyka plik po zakończeniu operacji, nawet jeśli wystąpi błąd. pathlib sprawia, że jest to niezwykle proste.
Kod w Pythonie:
from pathlib import Path
sciezka = Path("moje_dane.txt")
if sciezka.is_file():
print("--- Zawartość pliku (linijka po linijce) ---")
# .open() działa z 'with', co gwarantuje bezpieczne zamknięcie pliku
with sciezka.open(mode='r', encoding='utf-8') as plik:
for numer, linia in enumerate(plik, 1):
# .strip() usuwa białe znaki (np. znak nowej linii) z początku i końca
print(f"Linia {numer}: {linia.strip()}")
mode='r'oznacza tryb odczytu (read).enumerate(plik, 1)to sprytny sposób na uzyskanie zarówno numeru linii (zaczynając od 1), jak i jej treści.
Funkcja enumerate()
Funkcja enumerate() to sprytny pomocnik, który dodaje licznik do elementów dowolnej kolekcji (np. listy), gdy po niej przechodzisz.
Zamiast samemu tworzyć i zwiększać indeks w pętli, enumerate() robi to za Ciebie, zwracając pary: (indeks, wartość). Wyobraź sobie, że masz listę i chcesz wypisać każdy element razem z jego pozycją.
Bez enumerate() musiałbyś robić tak:
owoce = ["jabłko", "banan", "gruszka"]
indeks = 0
for owoc in owoce:
print(f"Pozycja {indeks}: {owoc}")
indeks += 1
Z enumerate() jest prościej i czytelniej:
owoce = ["jabłko", "banan", "gruszka"]
for indeks, owoc in enumerate(owoce):
print(f"Pozycja {indeks}: {owoc}")
Wynik w obu przypadkach:
Pozycja 0: jabłko
Pozycja 1: banan
Pozycja 2: gruszka
Możesz też zmienić numer startowy licznika, co jest bardzo przydatne:
# Zaczynamy liczenie od 1 zamiast od 0
for indeks, owoc in enumerate(owoce, start=1):
print(f"Miejsce {indeks}: {owoc}")
Wynik:
Miejsce 1: jabłko
Miejsce 2: banan
Miejsce 3: gruszka
Przechodzenie po wszystkich plikach w folderze
To jest niezwykle przydatne w automatyzacji, gdy chcesz przetworzyć wiele plików na raz. Używamy do tego pętli for i metody .iterdir(), która "przegląda" zawartość folderu.
Przykład: Wyobraź sobie, że masz folder raporty o takiej strukturze:
raporty/
├── raport_dzienny.txt
├── dane_sprzedazy.csv
├── podfolder/
└── notatki.txt
Kod w Pythonie:
# Tworzymy obiekt reprezentujący ścieżkę do folderu
folder_raportow = Path("raporty/")
print(f"🔍 Przeglądam zawartość folderu: {folder_raportow}")
# Sprawdzamy, czy folder istnieje
if folder_raportow.is_dir():
# Używamy pętli 'for' na metodzie .iterdir()
for element in folder_raportow.iterdir():
# Sprawdzamy, czy dany element jest plikiem
if element.is_file():
print(f" 📄 Znaleziono plik: {element.name}")
# Sprawdzamy, czy jest folderem
elif element.is_dir():
print(f" 📁 Znaleziono podfolder: {element.name}")
else:
print("Folder nie istnieje.")
# Wskazówka: Jeśli chcesz znaleźć tylko pliki o konkretnym rozszerzeniu,
# możesz użyć metody .glob(), np. folder_raportow.glob('*.txt')
Wynik działania kodu:
🔍 Przeglądam zawartość folderu: raporty
📄 Znaleziono plik: raport_dzienny.txt
📄 Znaleziono plik: dane_sprzedazy.csv
📁 Znaleziono podfolder: podfolder
📄 Znaleziono plik: notatki.txt
Zauważ, że element.name daje nam samą nazwę pliku/folderu, a element dałoby całą ścieżkę (np. raporty/raport_dzienny.txt).
⭐ Zadanie dla Ciebie
- Stwórz ręcznie folder o nazwie
moje_pliki. - Wewnątrz tego folderu stwórz trzy pliki tekstowe:
pierwszy.txt(wpisz w nim "jeden")drugi.txt(wpisz w nim "dwa")dane.log(wpisz w nim "jakiś log")
- Napisz skrypt w Pythonie, który:
- Przejdzie pętlą przez wszystkie elementy w folderze
moje_pliki. - Policzy, ile jest w nim plików z rozszerzeniem
.txt. - Na koniec wyświetli komunikat, np. "W folderze znaleziono X plików .txt".
- Przejdzie pętlą przez wszystkie elementy w folderze
Wskazówka: Aby sprawdzić rozszerzenie pliku, możesz użyć atrybutu .suffix. Dla ścieżki Path('pierwszy.txt') wyrażenie sciezka.suffix zwróci wartość '.txt'.
Prompt 10: Obsługa plików CSV
Prompt 10:
„Pokaż jak zapisać listę wydatków do pliku CSV i potem ją odczytać w Pythonie.”
Treść lekcji:
Pliki CSV (Comma-Separated Values) są idealne do przechowywania tabelarycznych danych, takich jak listy wydatków. Pokażę ci, jak to zrobić za pomocą wbudowanego w Pythona modułu csv.
Zapisywanie listy wydatków do pliku CSV
Mamy listę, gdzie każdy element jest kolejną listą zawierającą opis i kwotę wydatku. Chcemy ją zapisać do pliku wydatki.csv.
Krok po kroku:
- Zaimportuj moduł
csv. - Przygotuj dane – naszą listę wydatków.
- Zdefiniuj nagłówki – nazwy kolumn.
- Otwórz plik w trybie do zapisu (
'w'), używającwith open(...), co zapewni automatyczne zamknięcie pliku.newline=''jest ważnym argumentem, który zapobiega tworzeniu dodatkowych pustych wierszy.encoding='utf-8'gwarantuje poprawne zapisanie polskich znaków.
- Utwórz "pisarza" CSV za pomocą
csv.writer(). - Zapisz nagłówki za pomocą metody
writerow(). - Zapisz wszystkie dane za pomocą pętli
forlub metodywriterows().
Kod programu:
import csv
# 1. Nasze dane: lista list [opis, kwota]
wydatki = [
['Kawa na mieście', 15.50],
['Bilet do kina', 28.00],
['Zakupy spożywcze', 124.30],
['Paliwo', 150.00]
]
# 2. Nazwa pliku i nagłówki kolumn
nazwa_pliku = 'wydatki.csv'
naglowki = ['Opis', 'Kwota']
# 3. Zapisywanie do pliku CSV
try:
with open(nazwa_pliku, mode='w', newline='', encoding='utf-8') as plik_csv:
# Tworzymy obiekt "pisarza"
writer = csv.writer(plik_csv)
# Zapisujemy wiersz z nagłówkami
writer.writerow(naglowki)
# Zapisujemy wszystkie dane z naszej listy
writer.writerows(wydatki)
print(f"✅ Dane zostały pomyślnie zapisane do pliku '{nazwa_pliku}'.")
except Exception as e:
print(f"❌ Wystąpił błąd podczas zapisu pliku: {e}")
Po uruchomieniu tego skryptu, w tym samym folderze pojawi się plik wydatki.csv o następującej treści:
Opis,Kwota
Kawa na mieście,15.5
Bilet do kina,28.0
Zakupy spożywcze,124.3
Paliwo,150.0
Odczytywanie danych z pliku CSV
Teraz zrobimy operację odwrotną – wczytamy dane z pliku wydatki.csv z powrotem do programu i wyświetlimy je.
Krok po kroku:
- Zaimportuj moduł
csv. - Otwórz plik w trybie do odczytu (
'r'). - Utwórz "czytelnika" CSV za pomocą
csv.reader(). - Pomiń nagłówek (jeśli nie chcesz go przetwarzać) za pomocą
next(). - Przejdź przez pozostałe wiersze za pomocą pętli
for.
Kod programu:
import csv
nazwa_pliku = 'wydatki.csv'
lista_wczytanych_wydatkow = []
try:
with open(nazwa_pliku, mode='r', encoding='utf-8') as plik_csv:
# Tworzymy obiekt "czytelnika"
reader = csv.reader(plik_csv)
# Odczytujemy i pomijamy pierwszy wiersz (nagłówek)
naglowek = next(reader)
print(f"Odczytuję dane z kolumn: {naglowek}")
print("\n--- Wczytane wydatki ---")
# Pętla 'for' przechodzi po każdym wierszu w pliku
for wiersz in reader:
# Każdy wiersz to lista stringów, np. ['Kawa na mieście', '15.50']
opis = wiersz[0]
kwota = float(wiersz[1]) # Konwertujemy kwotę na liczbę!
print(f"Opis: {opis}, Kwota: {kwota:.2f} zł")
lista_wczytanych_wydatkow.append([opis, kwota])
print("\n✅ Dane zostały wczytane i przetworzone.")
except FileNotFoundError:
print(f"❌ Błąd: Plik '{nazwa_pliku}' nie został znaleziony.")
except Exception as e:
print(f"❌ Wystąpił błąd podczas odczytu pliku: {e}")
Wynik działania kodu:
Odczytuję dane z kolumn: ['Opis', 'Kwota']
--- Wczytane wydatki ---
Opis: Kawa na mieście, Kwota: 15.50 zł
Opis: Bilet do kina, Kwota: 28.00 zł
Opis: Zakupy spożywcze, Kwota: 124.30 zł
Opis: Paliwo, Kwota: 150.00 zł
✅ Dane zostały wczytane i przetworzone.
⭐ Zadanie dla Ciebie
- Zmodyfikuj pierwszy skrypt dodając do niego dodatkową kolumnę (np. z datą). Użyj ten skrypt do zapisania pliku
wydatki.csv. - Zmodyfikuj drugi skrypt (do odczytu) tak, aby:
- Nie tylko wyświetlał wczytane wydatki, ale także...
- Obliczał i wyświetlał na końcu sumę wszystkich wydatków z wczytanego pliku.
Wskazówka: Stwórz zmienną suma_wydatkow = 0 przed pętlą for, a wewnątrz pętli dodawaj do niej każdą wczytaną kwotę.
Prompt 11: Obsługa plików Excel
Prompt 11:
„Naucz mnie, jak w Pythonie pracować z plikami Excela.
Pokaż dwa sposoby:
- prosty przykład z biblioteką openpyxl,
- przykład z biblioteką pandas (do wygodniejszej pracy z danymi).
W obu przypadkach pokaż, jak otworzyć plik Excela i odczytać dane z pierwszej kolumny.
Na końcu podaj mi ćwiczenie do samodzielnego wykonania.”
Praca z plikami Excela to bardzo częste zadanie w automatyzacji i analizie danych. Pokażę Ci dwa najpopularniejsze sposoby, jak to robić w Pythonie.
Zanim zaczniemy, musisz zainstalować potrzebne biblioteki. Otwórz swój terminal lub wiersz poleceń i wpisz te dwie komendy: pip install openpyxl oraz pip install pandas
Na potrzeby naszych przykładów, stwórzmy prosty plik Excela o nazwie dane.xlsx z następującą zawartością w Arkusz1:
| A | B | C | |
| 1 | Produkt | Cena | Ilość |
| 2 | Jabłko | 3.50 | 10 |
| 3 | Banan | 4.20 | 8 |
| 4 | Gruszka | 5.10 | 15 |
Sposób 1: openpyxl – precyzyjna kontrola nad arkuszem
Biblioteka openpyxl pozwala na pracę z Excelem na niskim poziomie. Myślisz w kategoriach skoroszytów, arkuszy i komórek. Jest świetna, gdy chcesz modyfikować formatowanie, formuły lub pracować z pojedynczymi komórkami.
Przykład – odczytanie pierwszej kolumny (Produkt):
import openpyxl
from openpyxl.utils.exceptions import InvalidFileException
nazwa_pliku = 'dane.xlsx'
try:
# 1. Wczytaj skoroszyt (cały plik Excela)
skoroszyt = openpyxl.load_workbook(nazwa_pliku)
# 2. Wybierz aktywny arkusz
arkusz = skoroszyt.active
print(f"Odczytuję dane z arkusza: '{arkusz.title}'")
print("\n--- Produkty (metoda openpyxl) ---")
# 3. Przejdź pętlą po wierszach w pierwszej kolumnie ('A')
# sheet.max_row daje nam liczbę wszystkich wierszy w arkuszu
for i in range(1, arkusz.max_row + 1):
# Pobieramy komórkę po jej adresie, np. A1, A2, ...
komorka = arkusz[f'A{i}']
# Wartość komórki przechowuje atrybut .value
print(komorka.value)
except (FileNotFoundError, InvalidFileException):
print(f"❌ Błąd: Nie znaleziono pliku '{nazwa_pliku}' lub jest on uszkodzony.")
Wynik działania kodu:
Odczytuję dane z arkusza: 'Arkusz1'
--- Produkty (metoda openpyxl) ---
Produkt
Jabłko
Banan
Gruszka
Sposób 2: pandas – potęga analizy danych 📊
Biblioteka pandas to standard w analizie danych. Zamiast myśleć o komórkach, myślisz o całych tabelach (zwanych DataFrame). Jest niesamowicie wydajna i wygodna do odczytywania, filtrowania, grupowania i modyfikowania danych tabelarycznych.
Przykład – odczytanie pierwszej kolumny (Produkt):
import pandas as pd
nazwa_pliku = 'dane.xlsx'
try:
# 1. Wczytaj cały plik Excela do obiektu DataFrame
# Pandas automatycznie rozpozna tabelę i nagłówki
df = pd.read_excel(nazwa_pliku)
print("--- Cała tabela wczytana przez pandas ---")
print(df)
# 2. Odwołaj się do kolumny po jej nazwie z nagłówka
kolumna_produkt = df['Produkt']
print("\n--- Produkty (metoda pandas) ---")
# Możemy teraz pracować z całą kolumną
print(kolumna_produkt)
except FileNotFoundError:
print(f"❌ Błąd: Nie znaleziono pliku '{nazwa_pliku}'.")
Wynik działania kodu:
--- Cała tabela wczytana przez pandas ---
Produkt Cena Ilość
0 Jabłko 3.5 10
1 Banan 4.2 8
2 Gruszka 5.1 15
--- Produkty (metoda pandas) ---
0 Jabłko
1 Banan
2 Gruszka
Name: Produkt, dtype: object
Jak widzisz, pandas od razu wczytał całą tabelę w bardzo czytelnej formie. Dostęp do kolumny po jej nazwie (df['Produkt']) jest znacznie wygodniejszy i mniej podatny na błędy niż odwoływanie się po adresie komórki (A2).
Kiedy którego używać?
- Użyj
openpyxl, gdy musisz:- Zmienić kolor komórki, czcionkę, rozmiar.
- Dodać formuły Excela do komórek.
- Pracować z wykresami.
- Wykonywać bardzo precyzyjne operacje na strukturze pliku.
- Użyj
pandas, gdy musisz:- Szybko wczytać lub zapisać dane.
- Filtrować wiersze (np. pokaż tylko produkty droższe niż 4 zł).
- Sortować dane.
- Wykonywać obliczenia na całych kolumnach.
- Analizować dane i przygotowywać je do dalszych raportów.
W 90% przypadków związanych z danymi, pandas będzie lepszym i szybszym wyborem.
⭐ Zadanie dla Ciebie
Użyj biblioteki pandas, aby wykonać następujące zadanie:
- Wczytaj plik
dane.xlsx. - Stwórz nową, czwartą kolumnę o nazwie "Wartość".
- Oblicz wartość dla każdego produktu, mnożąc dane z kolumny "Cena" przez dane z kolumny "Ilość". Wynik umieść w nowej kolumnie "Wartość".
- Wyświetl całą tabelę (DataFrame) z nową kolumną.
- (Bonus) Zapisz zmodyfikowaną tabelę do nowego pliku Excela o nazwie
wyniki.xlsx.
Wskazówka: Nową kolumnę w pandas tworzy się bardzo prosto, np.: df['NowaKolumna'] = df['KolumnaA'] * df['KolumnaB']. Do zapisu użyj metody .to_excel(), np. df.to_excel('nowy_plik.xlsx', index=False).
Prompt 12: Mały projekt – Lista ToDo
Prompt 12:
„Napisz prosty program w Pythonie, który pozwala użytkownikowi dodać zadania do listy, wyświetlić je i oznaczyć jako wykonane.”
Treść lekcji:
Poniżej znajdziesz prosty program konsolowy w Pythonie do zarządzania listą zadań. Program jest w pełni skomentowany, abyś mógł zrozumieć, co dzieje się w każdej linijce.
Jak działa program?
Program działa w pętli, w której wyświetla menu z opcjami. Użytkownik może wybrać, co chce zrobić: wyświetlić listę zadań, dodać nowe zadanie, oznaczyć istniejące jako wykonane lub zakończyć program.
- Zadania przechowujemy w liście o nazwie
lista_zadan. - Każde zadanie to słownik, który ma dwa klucze:
opis(nazwa zadania) istatus(czy jest wykonane). - Używamy funkcji, aby kod był bardziej czytelny i zorganizowany.
Kod programu
# Lista, w której będziemy przechowywać nasze zadania.
# Każde zadanie to słownik z opisem i statusem.
lista_zadan = []
def wyswietl_zadania():
"""Funkcja do wyświetlania wszystkich zadań z listy."""
print("\n--- Twoje zadania ---")
if not lista_zadan:
print("Brak zadań na liście. Dodaj coś!")
else:
# Pętla przechodzi po każdym zadaniu i jego numerze (indeksie)
for idx, zadanie in enumerate(lista_zadan):
# Ustawiamy znacznik w zależności od statusu zadania
if zadanie["status"] == "wykonane":
znacznik = "[x]"
else:
znacznik = "[ ]"
# Wyświetlamy zadanie w formacie: 1. [ ] Zrobić zakupy
print(f"{idx + 1}. {znacznik} {zadanie['opis']}")
print("---------------------\n")
def dodaj_zadanie():
"""Funkcja do dodawania nowego zadania."""
opis_zadania = input("Podaj treść nowego zadania: ")
# Tworzymy nowe zadanie jako słownik
nowe_zadanie = {
"opis": opis_zadania,
"status": "niewykonane"
}
# Dodajemy słownik do naszej listy
lista_zadan.append(nowe_zadanie)
print(f"✅ Dodano zadanie: '{opis_zadania}'")
def oznacz_jako_wykonane():
"""Funkcja do zmiany statusu zadania na 'wykonane'."""
wyswietl_zadania()
if not lista_zadan:
return # Jeśli nie ma zadań, zakończ funkcję
try:
numer_str = input("Podaj numer zadania do oznaczenia jako wykonane: ")
numer_idx = int(numer_str) - 1 # Odejmujemy 1, bo listy są indeksowane od 0
# Sprawdzamy, czy podany numer jest prawidłowy
if 0 <= numer_idx < len(lista_zadan):
lista_zadan[numer_idx]["status"] = "wykonane"
print(f"✅ Oznaczono zadanie '{lista_zadan[numer_idx]['opis']}' jako wykonane.")
else:
print("❌ Błędny numer zadania. Spróbuj ponownie.")
except ValueError:
print("❌ To nie jest prawidłowy numer. Proszę podać liczbę.")
# --- Główna pętla programu ---
def main():
print("Witaj w prostym menedżerze zadań!")
while True:
print("Menu:")
print("1. Wyświetl zadania")
print("2. Dodaj nowe zadanie")
print("3. Oznacz zadanie jako wykonane")
print("4. Zakończ program")
wybor = input("Wybierz opcję (1-4): ")
if wybor == '1':
wyswietl_zadania()
elif wybor == '2':
dodaj_zadanie()
elif wybor == '3':
oznacz_jako_wykonane()
elif wybor == '4':
print("Do zobaczenia!")
break
else:
print("❌ Nieprawidłowa opcja. Proszę wybrać numer od 1 do 4.")
# Uruchomienie głównej funkcji programu
if __name__ == "__main__":
main()
Jak uruchomić program?
- Skopiuj powyższy kod.
- Wklej go do pliku o nazwie np.
zadania.py. - Otwórz terminal lub wiersz poleceń, przejdź do folderu, w którym zapisałeś plik.
- Wpisz komendę
python zadania.pyi naciśnij Enter. - Postępuj zgodnie z instrukcjami w menu programu.
⭐ Zadanie dla Ciebie
Obecnie lista zadań w programie jest przechowywana tylko w pamięci. Po zakończeniu działania programu wszystkie dane znikają. Twoim zadaniem jest przerobić kod tak, aby zadania były zapisywane w pliku CSV i wczytywane przy ponownym uruchomieniu programu.
Szczegóły do wdrożenia:
- Przy uruchomieniu programu zadania powinny być wczytywane z pliku
zadania.csv.- Jeśli plik nie istnieje → lista zadań pozostaje pusta.
- W pliku każda linia ma zawierać opis zadania i jego status (
niewykonanelubwykonane).
- Przy zamykaniu programu wszystkie zadania mają być zapisane z powrotem do pliku CSV.
- Dodaj w pliku nagłówek (np.
opis,status). - Użyj
newline=''przy zapisie, aby uniknąć pustych wierszy w pliku.
- Dodaj w pliku nagłówek (np.
- Program nadal powinien obsługiwać wszystkie opcje menu:
- wyświetlanie zadań,
- dodawanie nowego zadania,
- oznaczanie zadania jako wykonane,
- zakończenie działania.
Wskazówki techniczne:
- Skorzystaj z modułu
csvi funkcjicsv.readerorazcsv.writer. - Do sprawdzenia, czy plik istnieje, użyj
os.path.exists() lubpathlib.Path().exists(). - Każdy wiersz wczytany z pliku zamieniaj na słownik w postaci:
{"opis": "treść zadania", "status": "niewykonane"} - Zadbaj, by program działał poprawnie nawet wtedy, gdy plik nie istnieje lub gdy lista zadań jest pusta.
Efekt końcowy:
- Po uruchomieniu program odczytuje zadania z pliku.
- Po zakończeniu działania program zapisuje wszystkie zmiany.
- Zadania są dostępne przy ponownym uruchomieniu programu 🚀
Prompt 13: Integracja z biznesem - automatyczne wysyłanie maili
Prompt 13:
„Pokaż, jak mogę zautomatyzować wysyłkę maila w Pythonie z raportem wydatków w załączniku, korzystając z popularnych rozwiązań dostępnych w systemie Windows (np. Outlook).”
Treść lekcji:
Zautomatyzowanie wysyłki maili to jedno z najczęstszych i najbardziej satysfakcjonujących zadań w Pythonie. Pokażę Ci, jak to zrobić, kontrolując bezpośrednio aplikację Outlook zainstalowaną na Twoim komputerze.
Zaletą tego podejścia jest to, że nie musisz nigdzie w kodzie zapisywać swojego hasła do poczty. Skrypt użyje już skonfigurowanego i zalogowanego konta w Outlooku.
Wymagania wstępne
- Zainstalowany Outlook: Musisz mieć na komputerze zainstalowaną i skonfigurowaną aplikację MS Outlook.
- Biblioteka
pywin32: To specjalna biblioteka, która pozwala Pythonowi "rozmawiać" z innymi aplikacjami w systemie Windows. Zainstaluj ją, wpisując w terminalu:pip install pywin32
Krok po kroku: Wysyłamy maila z załącznikiem
Nasz skrypt wykona następujące czynności:
- Najpierw stworzy prosty, tekstowy raport wydatków.
- Następnie uruchomi w tle "połączenie" z aplikacją Outlook.
- Stworzy nową wiadomość e-mail.
- Wypełni odbiorcę, temat i treść wiadomości.
- Doda stworzony wcześniej raport jako załącznik.
- Wyświetli gotowego maila do sprawdzenia (lub wyśle go automatycznie).
Oto kompletny kod programu:
import win32com.client as win32
import os
def stworz_raport():
"""Tworzy prosty plik tekstowy z raportem."""
nazwa_pliku = "raport_wydatkow.txt"
try:
with open(nazwa_pliku, "w", encoding="utf-8") as plik:
plik.write("Raport wydatków - Tydzień 37\n")
plik.write("============================\n")
plik.write("Paliwo: 150.00 PLN\n")
plik.write("Zakupy spożywcze: 235.50 PLN\n")
plik.write("Rozrywka: 80.00 PLN\n")
plik.write("----------------------------\n")
plik.write("SUMA: 465.50 PLN\n")
print(f"✅ Stworzono plik raportu: '{nazwa_pliku}'")
return nazwa_pliku
except Exception as e:
print(f"❌ Nie udało się stworzyć pliku raportu: {e}")
return None
def wyslij_maila_przez_outlook(odbiorca, temat, tresc, zalacznik_sciezka):
"""
Tworzy i wysyła (lub wyświetla) e-mail za pomocą aplikacji Outlook.
"""
try:
# Uzyskaj pełną, absolutną ścieżkę do załącznika
pelna_sciezka_zalacznika = os.path.abspath(zalacznik_sciezka)
# 1. Połącz się z aplikacją Outlook
outlook = win32.Dispatch('outlook.application')
# 2. Stwórz nową wiadomość e-mail (0 to stała oznaczająca MailItem)
mail = outlook.CreateItem(0)
# 3. Ustaw podstawowe pola
mail.To = odbiorca
mail.Subject = temat
# Możesz użyć .Body dla zwykłego tekstu lub .HTMLBody dla HTML
mail.HTMLBody = f"""
Cześć,
W załączniku przesyłam automatycznie wygenerowany raport z ostatniego tygodnia.
Pozdrawiam,
Twój Robot 🤖
"""
# 4. Dodaj załącznik
mail.Attachments.Add(pelna_sciezka_zalacznika)
# 5. Wyświetl maila do weryfikacji lub wyślij
# Opcja A: Wyświetl okno wiadomości, aby sprawdzić i wysłać ręcznie
mail.Display()
# Opcja B: Wyślij maila automatycznie w tle (używaj ostrożnie!)
# mail.Send()
print(f"✅ Przygotowano e-mail do: {odbiorca}")
except Exception as e:
print(f"❌ Wystąpił błąd podczas próby wysłania e-maila: {e}")
print("Upewnij się, że masz zainstalowany i uruchomiony program MS Outlook.")
# --- Główna część skryptu ---
if __name__ == "__main__":
# Najpierw stwórz plik raportu
nazwa_pliku_raportu = stworz_raport()
# Jeśli raport został pomyślnie stworzony, wyślij maila
if nazwa_pliku_raportu:
wyslij_maila_przez_outlook(
odbiorca="szef@twojafirma.com; ksiegowosc@twojafirma.com",
temat="Tygodniowy raport wydatków",
tresc="Raport w załączniku.", # Ta treść jest zastępowana przez HTMLBody
zalacznik_sciezka=nazwa_pliku_raportu
)
Jak to działa?
win32.Dispatch('outlook.application')to magiczna linijka, która daje Pythonowi "pilota" do sterowania Outlookiem.mail.Display()jest bezpieczniejszą opcją na początek – otwiera okno nowej wiadomości, która jest już w pełni wypełniona i ma dodany załącznik. Możesz ją sprawdzić i kliknąć "Wyślij".mail.Send()robi to samo, ale wysyła maila od razu, bez pokazywania okna. Idealne do w pełni zautomatyzowanych skryptów, które działają np. w nocy.- W polu
odbiorcamożesz wpisać kilka adresów, oddzielając je średnikiem;.
⭐ Zadanie dla Ciebie
Wyobraź sobie, że chcesz wysłać spersonalizowane raporty do kilku pracowników.
- Stwórz listę słowników, gdzie każdy słownik reprezentuje jednego pracownika, np.:
pracownicy = [
{'imie': 'Anna', 'email': 'anna.kowalska@example.com'},
{'imie': 'Piotr', 'email': 'piotr.nowak@example.com'}
]
- Napisz pętlę
for, która przejdzie po liściepracownicy. - Wewnątrz pętli wywołaj funkcję
wyslij_maila_przez_outlookdla każdego pracownika. - Zmodyfikuj temat i treść maila tak, aby zawierały imię pracownika (użyj f-stringów, np.
f"Raport dla {pracownik['imie']}").
Dzięki temu zamiast jednego maila do wszystkich, Twój skrypt przygotuje osobne, spersonalizowane wiadomości dla każdej osoby z listy!
Prompt 14: Pomysły na automatyzacje biurowe w Pythonie
Prompt 14:
„Zaproponuj mi 3 pomysły na proste automatyzacje biurowe w Pythonie, które mogę zrobić w dwie godziny.”
Treść lekcji:
Oto 3 praktyczne pomysły na proste automatyzacje biurowe, które idealnie nadają się na początek i są do zrobienia w około dwie godziny. Każdy z nich rozwiązuje realny, powtarzalny problem.
Inteligentny Organizator Folderu "Pobrane"
Problem: Twój folder Pobrane to chaos. Walają się w nim faktury w PDF, zdjęcia, dokumenty Worda i arkusze Excela. Ręczne sortowanie tego co tydzień to strata czasu.
Jak to działa? Skrypt automatycznie skanuje folder Pobrane i przenosi pliki do odpowiednich podfolderów na podstawie ich rozszerzenia.
- Wszystkie pliki
.pdfi.docxtrafiają doDokumenty/ - Pliki
.jpg,.png,.giftrafiają doObrazy/ - Pliki
.xlsx,.csvtrafiają doArkusze/ - Wszystko inne zostaje w folderze
Inne/
Potrzebne biblioteki: Tylko pathlib (wbudowana w Pythona).
Poziom trudności: Łatwy.
Co zyskujesz? Nauczysz się praktycznego zarządzania plikami i folderami, sprawdzania rozszerzeń i automatycznego przenoszenia danych – to fundament wielu bardziej złożonych automatyzacji.
Fragment kodu na start:
from pathlib import Path
# Ścieżka do folderu, który chcesz posprzątać
folder_do_posprzatania = Path.home() / "Downloads"
# Słownik mapujący rozszerzenia na foldery docelowe
foldery_docelowe = {
".pdf": "Dokumenty", ".docx": "Dokumenty",
".jpg": "Obrazy", ".png": "Obrazy",
".xlsx": "Arkusze", ".csv": "Arkusze"
}
# Pętla po wszystkich plikach w folderze
for plik in folder_do_posprzatania.iterdir():
if plik.is_file():
# Sprawdź rozszerzenie i przenieś plik
# ... tu umieść swoją logikę ...
pass
Masowe Zmienianie Nazw Plików
Problem: Masz 100 zdjęć z wakacji o nazwach IMG_2341.JPG, IMG_2342.JPG itd. Chcesz, aby nazywały się Wakacje_Hiszpania_2025_001.JPG, Wakacje_Hiszpania_2025_002.JPG itd. Ręczna zmiana jest monotonna i podatna na błędy.
Jak to działa? Skrypt przechodzi pętlą przez wszystkie pliki w danym folderze. Dla każdego pliku tworzy nową, ustandaryzowaną nazwę z numerem porządkowym, a następnie zmienia starą nazwę na nową.
Potrzebne biblioteki: Tylko pathlib (wbudowana).
Poziom trudności: Łatwy.
Co zyskujesz? Perfekcyjnie opanujesz operacje na plikach, w tym iterowanie, tworzenie nowych nazw w oparciu o schemat (np. z użyciem f-stringów i formatowania liczb) oraz bezpieczne zmienianie nazw.
Automatyczne Wypełnianie Dokumentu Word
Problem: Regularnie musisz tworzyć podobne dokumenty (np. oferty, umowy, certyfikaty), w których zmieniają się tylko kluczowe dane, takie jak nazwa klienta, data, kwota czy adres.
Jak to działa? Tworzysz szablon dokumentu .docx ze specjalnymi znacznikami (np. {{NAZWA_KLIENTA}}, {{DATA_UMOWY}}). Skrypt w Pythonie wczytuje dane (np. z pliku Excel), otwiera szablon, podmienia znaczniki na właściwe dane, a na koniec zapisuje gotowy, wypełniony dokument pod nową nazwą.
Potrzebne biblioteki: python-docx (pip install python-docx), ewentualnie pandas do wczytania danych.
Poziom trudności: Średni.
Co zyskujesz? Nauczysz się programowo generować dokumenty biurowe. To niezwykle potężna umiejętność, która pozwala zautomatyzować tworzenie setek spersonalizowanych dokumentów w kilka sekund.
Podsumowanie – nauka Pythona z AI dla początkujących
To nie jest pełny kurs Pythona – ale to wystarczy, żeby zacząć, złapać podstawy i poczuć, czy programowanie to coś dla Ciebie. Jeśli przejdziesz wszystkie prompty, będziesz w stanie:
- pisać proste skrypty i funkcje,
- korzystać z bibliotek w Pythonie,
- pracować z danymi w Excelu i CSV,
- oraz wykonywać pierwsze automatyzacje w Pythonie przydatne w codziennych zadaniach biurowych.
W tym mini kursie celowo skupiłem się na absolutnych podstawach, które pozwalają szybko zacząć automatyzować proste zadania. Pominąłem jednak kilka tematów, które mogą Ci się bardzo przydać w dalszej nauce. Warto je zgłębić samodzielnie z pomocą AI, np.:
- operacje na tekstach i przydatne metody stringów (
split(),join(),replace()), - zasięg zmiennych (local vs global),
- praca z klasami i obiektami (OOP – wprowadzenie),
- list comprehensions (czyli skrócone zapisy pętli),
- praca z datami i czasem (
datetime).
Jak widzisz, dzięki temu mini kursowi masz już solidny grunt, żeby dalej się rozwijać. Od tej pory możesz nie tylko pisać proste skrypty, ale też zacząć dostrzegać, gdzie w Twojej pracy Python może realnie przyspieszyć i uprościć codzienne zadania.
Przy okazji wspomniałem też o bibliotece Pandas – to potężne narzędzie do pracy z danymi, którego możliwości wykraczają daleko poza otwieranie plików Excela. Sama ta biblioteka to materiał na osobny artykuł, w którym można pokazać podstawy analizy danych w Pythonie.
A jeśli chcesz poznać praktyczne zastosowania Pythona w realnych procesach biznesowych i zobaczyć, jak wygląda automatyzacja zadań w Pythonie, przejdź do mojej serii: „Zautomatyzuj SAP” (już niebawem na blogu) – tam pokazuję, jak Python może przyspieszyć pracę z SAP-em.

