🔩 Nowy Rekrut
0 / 66 umiejętności

PODSTAWY PYTHONA

dla Twórców Gier

Naucz się Pythona od zera — przez pisanie, nie czytanie. Każda sekcja to przykład, zadania z oczekiwanym wynikiem i projekt końcowy. 7 modułów, które dają solidne podstawy przed kursem Pygame.

Python 3 1175 ćwiczeń 7 projektów ~45 h praktyki 0 instalacji Język polski
Piszesz kod od pierwszej minuty — w przeglądarce, bez instalacji.
M00

Witaj — co zbudujesz i jak działa kurs

Witaj w Podstawach Pythona. Tu nauczysz się programować od zera — bez żadnej wcześniejszej wiedzy. Nie przepiszesz cudzego kodu z internetu: każdą linijkę napiszesz sam i zrozumiesz, co robi i dlaczego. To ten sam Python, którym pisze się aplikacje, analizuje dane i automatyzuje powtarzalną robotę — uczymy go na grach, bo najszybciej widać efekt.
🎯 Co zbudujesz — 7 prawdziwych programów
> python baza_graczy.py
=== RANKING GRACZY ===
🥇 Anna  — 1500 pkt
🥈 Marek — 1200 pkt
🥉 Kasia  — 980 pkt
Dodać gracza? (t/n): _
Każdy moduł kończysz działającym programem, który uruchomisz w terminalu i pokażesz:
  • 🃏 M01 → Karta Gracza  ·  ⚖️ M02 → Kalkulator BMI
  • 🏆 M03 → Top 3 Graczy  ·  🎲 M04 → Gra „Zgadnij Liczbę"
  • ⚔️ M05 → Kalkulator RPG  ·  📝 M06 → Analizator tekstu
  • 🗃️ M07 → Baza danych graczy
To nie ćwiczenia w próżni — piszesz prawdziwy Python, od pierwszej linijki do działających aplikacji konsolowych.
Kurs to siedem modułów (M01–M07), a każdy zbudowany jest tak samo: krótka teoria z życiowym przykładem, praktyka — kod, który piszesz i uruchamiasz wprost tu, w przeglądarce (klikasz „Sprawdź", a my od razu mówimy, czy się zgadza), quiz sprawdzający zrozumienie i projekt końcowy. Kurs jest dla każdego, kto zaczyna zupełnie od zera — nie musisz nic umieć z programowania ani niczego instalować, żeby zacząć.
🎉 Dobra wiadomość: w tym kursie nie musisz nic instalować. Kod piszesz i uruchamiasz wprost na stronie, w każdej lekcji — wystarczy przeglądarka. Możesz od razu przejść do Modułu 1 i zacząć pisać.
Dlaczego tak? Bo dla osoby, która dopiero zaczyna, instalowanie Pythona i edytora bywa największą przeszkodą — łatwo się zniechęcić, zanim w ogóle napisze się pierwszą linijkę. Dlatego u nas piszesz kod od razu w przeglądarce, a o instalacji w ogóle nie musisz myśleć.
🛠 Chcesz później programować też poza przeglądarką? (opcjonalne — rozwiń)
Do tego kursu nie jest to potrzebne — ale jeśli zechcesz budować własne, większe projekty i gry (Pygame) na swoim komputerze, możesz w dowolnej chwili zainstalować Pythona i edytor VS Code. Mamy gotową instrukcję krok po kroku, ze zrzutami ekranu:
M01

Twój Pierwszy Program

Napiszesz swój pierwszy program i nauczysz się fundamentów: wypisywania tekstu, zmiennych, obliczeń i rozmowy z użytkownikiem. Każdy program na świecie używa tych właśnie elementów.
Wyobraź sobie przepis kulinarny — lista kroków dla kucharza. Program to lista kroków dla komputera. Python wykonuje je linia po linii, od góry do dołu.
Program to po prostu lista instrukcji — trochę jak przepis kulinarny, tyle że kucharzem jest komputer: czyta go linijka po linijce i wykonuje po kolei. Każda linia kodu = jedna instrukcja dla Pythona, a wynik (to, co program wypisze) zobaczysz od razu pod kodem.
🐍 Jak działa nauka w tym kursie
Nic nie instalujesz, nie tworzysz żadnych plików — wszystko dzieje się tutaj, w przeglądarce:
1
Każda sekcja ma zakładki: 📖 Teoria + ćwiczenia (czytasz i robisz krótkie „szybkie strzały") oraz 🐍 Praktyka (piszesz prawdziwy kod).
2
Wpisujesz kod w okienko i klikasz „Sprawdź" — Python uruchamia go od razu i mówi, czy wynik się zgadza (pierwsze uruchomienie chwilę trwa).
3
Zalicz ćwiczenia z praktyki, żeby odblokować przycisk „dalej" — uczysz się pisząc, nie tylko czytając.
👾 W grze Asteroidy użyjesz tego tak:
zycia = 3           # ile żyć ma gracz
punkty = 0          # wynik w HUD
statek_x = 400      # pozycja x statku (środek ekranu 800px)
predkosc = 5        # pikseli na klatkę
SZEROKOSC = 800     # stała — szerokość okna gry
Każda zmienna w grze to element z tego modułu!
1.1

print() — wyświetlanie tekstu

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
1.2

Zmienne i typy danych — pudełka na dane

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
1.3

Funkcja type() — sprawdzanie typów

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
1.4

Komentarze — notatki w kodzie

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
1.5

Arytmetyka — Python jako kalkulator

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
1.6

Kolejność operatorów

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
1.7

f-stringi — łączenie tekstu ze zmiennymi

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
1.8

Konwersja typów

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
1.9

Moduły i import — gotowe narzędzia

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
1.10

Wczytywanie danych — input()

Do tej pory Twoje programy znały wszystkie dane z góry — wpisywałeś je wprost w kod (imie = "Bruno"). Teraz poznasz coś, co zamienia program w rozmowę: input(). Program zadaje pytanie, gracz wpisuje odpowiedź, a przy każdym uruchomieniu może być inna.
💭 Wyobraź sobie, że gra wita każdego gracza tak samo: „Witaj, Bruno!" — bez sensu, bo każdy nazywa się inaczej. Trzeba najpierw zapytać gracza, jak ma na imię, a dopiero potem go powitać. Dokładnie do tego służy input(): program pyta, gracz wpisuje, program zapamiętuje odpowiedź i używa jej dalej.
input() (po angielsku input = wejście) sprawia, że program przestaje być monologiem, a staje się rozmową. Robi trzy rzeczy po kolei: najpierw wyświetla pytanie, które wpiszesz w nawiasach; potem zatrzymuje cały program i czeka, aż użytkownik coś wpisze i naciśnie Enter; na końcu zwraca to, co zostało wpisane, żebyś mógł zapisać odpowiedź do zmiennej i użyć jej dalej.
imie = input("Jak masz na imie? ")
print(f"Czesc, {imie}!")
▸ Gdy gracz wpisze „Bruno":
Czesc, Bruno!
Program zamarł na pytaniu i czekał — dopiero po wpisaniu „Bruno" i naciśnięciu Enter Python zapisał ten tekst do zmiennej imie i ruszył dalej. Dlatego wynik zależy od tego, co wpiszesz: uruchom z innym imieniem, dostaniesz inne powitanie. To pierwszy raz, gdy Twój program zachowuje się inaczej przy każdym uruchomieniu.
💡 Jak sprawdzamy input tutaj? Wcześniej input() był na samym końcu kursu, „do zrobienia u siebie" — bo potrzebuje kogoś, kto wpisze odpowiedź. Teraz sprawdzarka robi to za Ciebie: podstawia przygotowane odpowiedzi i patrzy, co Twój program wypisze. Piszesz kod z input() normalnie, klikasz „Sprawdź", a my karmimy go danymi i sprawdzamy wynik. Gdy potem zbudujesz własną grę na komputerze, ten sam input() zatrzyma program i poczeka, aż wpiszesz coś w terminalu.
Ciekawe — a co zwróci input(), gdy zamiast imienia wpiszesz liczbę? Sprawdźmy typ:
wiek = input("Ile masz lat? ")
print(type(wiek))
▸ Gdy wpiszesz „14":
<class 'str'>
Wpisałeś 14 — wygląda jak liczba, a Python uparcie mówi str. To nie pomyłka: input() z zasady oddaje wszystko jako tekst, bo nie wie, czy chciałeś podać wiek do liczenia, czy numer pokoju, którego nigdy nie będziesz dodawać. Skoro w zmiennej siedzi tekst, zobacz, co się stanie, gdy spróbujesz dodać do niego liczbę 10:
wiek = input("Ile masz lat? ")
print(wiek + 10)
▸ Gdy wpiszesz „14":
TypeError: can only concatenate str (not "int") to str
TypeError: can only concatenate str (not "int") to str
Python nie doda tekstu "14" do liczby 10 — to różne typy. input() zawsze zwraca str, więc samo wpisanie liczby nie wystarczy.

✅ Rozwiązanie: owiń input() w int() (albo float()): wiek = int(input("Ile masz lat? "))
Oto poprawne podejście — konwersję robimy od razu przy wczytywaniu, zanim wartość trafi do zmiennej (przydaje się int() z sekcji 1.8):
wiek = int(input("Ile masz lat? "))
print(f"Za 10 lat bedziesz miec {wiek + 10} lat.")
▸ Gdy wpiszesz „14":
Za 10 lat bedziesz miec 24 lat.
int(input(...)) działa od środka na zewnątrz, jak matrioszka. Najpierw uruchamia się input() i wczytuje tekst "14". Potem ten tekst trafia do int(), które zamienia go na prawdziwą liczbę 14. Dopiero ta liczba ląduje w zmiennej, więc + 10 działa bez problemu. Zasada raz a dobrze: jeśli wczytaną wartość zamierzasz dodawać, mnożyć albo porównywać jak liczbę — owiń input() w int() lub float() już w chwili wczytywania.

✔️ Po tej sekcji powinieneś umieć:
  • pobierać dane od gracza przez input()
  • wiedzieć, że input() zawsze zwraca str (tekst)
  • wczytywać liczby przez int(input(...)) / float(input(...))
  • rozpoznać TypeError z dodawania tekstu do liczby i go naprawić
Twoje programy potrafią już rozmawiać z graczem — to ostatni element fundamentu. W module 2 program nauczy się podejmować decyzje: wczytasz coś od gracza i na tej podstawie wybierzesz, co zrobić (if, True/False). Właśnie dlatego input() poznajesz teraz — od tej chwili będzie wracać w prawie każdym zadaniu.
Tu napiszesz kod z input() i sam sprawdzisz wynik — my podstawimy dane. Bez praktyki przycisk „dalej" pozostaje zablokowany.
M01

Twój Pierwszy Program — Podsumowanie

✔️ Co umiesz po tym module:
  • wypisywać tekst i liczby przez print()
  • tworzyć zmienne wszystkich 4 typów (str, int, float, bool)
  • sprawdzać typ przez type()
  • pisać komentarze znakiem #
  • wykonywać obliczenia wszystkimi 7 operatorami arytmetycznymi
  • rozumieć kolejność działań i używać nawiasów
  • łączyć tekst ze zmiennymi przez f-stringi
  • konwertować typy przez int(), float(), str()
  • importować moduły przez import random i używać random.randint()
🎯 Brawo! Przeszedłeś przez cały Moduł 01 — to nie jest mała rzecz. Nauczyłeś się wypisywać tekst, tworzyć zmienne, liczyć (też // i %), formatować f-stringami, konwertować typy i losować liczby przez random. To fundament na którym stoi każdy program na świecie.

Ale teoria bez praktyki to tylko słowa. Czas złożyć WSZYSTKO w jedną całość — napisz projekt w okienku poniżej, uruchom go i porównaj wynik z przykładem. To prawdziwy sprawdzian: kilka kroków liczenia, nie jedno działanie.
🏗️ Projekt końcowy — „Karta Bohatera"

Zbudujesz generator karty bohatera — takie narzędzie naprawdę bywa w grach RPG: gracz podaje kilka rzeczy o swojej postaci, a program sam wylicza z nich statystyki i składa gotową kartę. To Twój pierwszy program, który nie tylko wypisuje to, co dostał, ale naprawdę liczy — i łączy w jedną całość wszystko z tego modułu: zmienne i typy, arytmetykę (w tym dzielenie całkowite i resztę), formatowanie liczb oraz losowanie. Przeczytaj spokojnie każdy krok — nie spiesz się, bo to siedem małych zadań, które razem dają coś, z czego będziesz dumny.

  1. Przygotuj losowanie. Dwie wartości na karcie będą losowe. Zadbaj o to, żeby potrzebny moduł był gotowy, zanim go użyjesz.
  2. Zapisz dane bohatera w zmiennych. Będą trzy: imię (Aria), wiek (14) i liczba pokonanych wrogów (37). Zwróć uwagę, które z nich są tekstem, a które liczbami — bo na tych drugich będziesz liczyć.
  3. Policz punkty doświadczenia. Każdy przeżyty rok daje 10 punktów, każdy pokonany wróg — 25. Zapisz to jednym wyrażeniem, bez zmiennych pomocniczych. Zanim uruchomisz program, policz wynik na kartce.
  4. Wyznacz poziom i drogę do awansu. Bohater awansuje co każde 100 punktów. Wylicz jego aktualny poziom, a potem — ile punktów brakuje mu do następnego. Oba działania da się zapisać krótko, jeśli sięgniesz po odpowiednie operatory dzielenia.
  5. Wylosuj celność. Celność to liczba z ułamkiem od 50 do 100. Surowa wartość ma mnóstwo cyfr po przecinku, więc na karcie pokaż ją zaokrągloną do jednego miejsca i ze znakiem procentu.
  6. Wylosuj szczęśliwą liczbę. Bohaterowi przyda się też szczęśliwa liczba całkowita od 1 do 100.
  7. Złóż kartę. Wypisz wszystko jako czytelną kartę: nagłówek, a pod nim każdą statystykę w osobnej linii. Dbaj o to, żeby karta ładnie się czytała — to ją zobaczy gracz.
Po skończeniu sprawdź, czy Twój program:
  • korzysta z danych bohatera zapisanych w zmiennych,
  • liczy punkty z wieku i liczby pokonanych wrogów,
  • wyznacza poziom przez dzielenie całkowite, a „do awansu" przez resztę z dzielenia,
  • losuje celność i pokazuje ją zaokrągloną do jednego miejsca po przecinku, ze znakiem procentu,
  • losuje szczęśliwą liczbę, a całą kartę składa f-stringami.
⏳ Python uruchomi się przy pierwszym „Uruchom" (pierwszy raz chwilę trwa).
M01

Test końcowy — Twój Pierwszy Program

Zdaj test końcowy, żeby odblokować Moduł 02. Próg: 80%. Każde podejście to NOWY zestaw 15 pytań z całego modułu. Prób bez limitu.
📝 Test końcowy — Moduł 01
Sprawdź całą wiedzę z modułu. Odpowiedz na wszystkie pytania, potem sprawdź wynik.
M02

Decyzje — Warunki i if/else

Nauczysz się tworzyć programy, które podejmują decyzje — reagują inaczej na różne dane. To serce każdego algorytmu.
Wyobraź sobie skrzyżowanie z sygnalizacją: zielone → jedź, czerwone → stój. Program też może reagować inaczej na różne sytuacje — wybierać jedną z wielu ścieżek.
W Pythonie decyzje realizujesz słowem if (jeśli) i else (w przeciwnym razie). Dzięki temu ten sam program potrafi zachować się inaczej dla każdego, kto go uruchomi.
👾 W grze Asteroidy użyjesz tego tak:
if zycia <= 0:
    stan_gry = "game_over"   # koniec gry!

if laser_trafil_wroga:
    punkty += 20             # wróg trudniejszy = więcej pkt
elif laser_trafil_asteroide:
    punkty += 10             # asteroida łatwiejsza = mniej pkt

if trafiony and not nietykalny:
    zycia -= 1               # traci życie tylko gdy nie jest nietykalny
Każda decyzja w grze to if/elif/else z tego modułu!
2.1

Wartości True i False

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
2.2

Operatory porównania — pełna lista

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
2.3

Pułapka: = vs ==

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
2.4

if — prosta decyzja

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
2.5

if / else — dwie ścieżki

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
2.6

elif — wiele opcji

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
2.7

Operatory logiczne: and, or, not

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
2.8

Zagnieżdżone if

🎬 Wstęp — obejrzyj (≈30 s), potem klikaj dalej i pisz kod
M02

Decyzje — Podsumowanie

✔️ Co umiesz po tym module:
  • rozumieć typ bool i wartości True/False
  • używać wszystkich 6 operatorów porównania
  • nigdy nie mylić = (przypisanie) z == (porównanie)
  • pisać if z prawidłowym wcięciem
  • pisać if/else dla dwóch ścieżek
  • pisać łańcuch if/elif/else dla wielu opcji
  • łączyć warunki przez and, or, not
  • pisać zagnieżdżone if i wiedzieć kiedy użyć and zamiast
🎯 Brawo! Właśnie nauczyłeś się czegoś kluczowego — Twoje programy mogą teraz podejmować decyzje. Wiesz, jak używać True i False, wszystkich 6 operatorów porównania, if, if/else, if/elif/else, operatorów and, or, not, i zagnieżdżonych warunków. Ale teoria bez praktyki to tylko słowa.

Teraz kolej na Ciebie — napisz System walki samodzielnie, bez zaglądania do rozwiązania. Przeczytaj wymagania, zastanów się jak to zbudować, i zacznij pisać linijka po linijce. Poprawiaj błędy, które się pojawią — to normalna część programowania. "Pokaż rozwiązanie" to ostateczność, gdy naprawdę utkniesz — nie pierwszy krok.
⚔️ Projekt końcowy — „System walki"

Bruno staje do walki z goblinem. Twój program policzy obrażenia (z szansą na trafienie krytyczne), sprawdzi tarczę goblina i oceni, czy przeciwnik jeszcze walczy — łącząc wszystko z tego modułu: porównania, if/elif/else, and i zagnieżdżony if. Dane walki masz gotowe w zmiennych na górze — Ty dopisujesz samą logikę.

  1. Broń. Jeśli bronią jest miecz, wypisz Bron: miecz.
  2. Trafienie krytyczne. Jeśli siła bohatera osiągnęła próg krytyka — obrażenia się podwajają i wypisz Trafienie krytyczne!; w przeciwnym razie obrażenia są bazowe i wypisz Zwykly cios.
  3. Tarcza (warunek w warunku). Jeśli goblin ma tarczę, a cios jest słaby (obrażenia poniżej 30) — obrażenia spadają do zera i wypisz Tarcza zablokowala slaby cios!
  4. Zdrowie. Policz, ile zdrowia zostało goblinowi po ciosie, i wypisz f-stringiem HP goblina: z tą wartością.
  5. Stan goblina (kilka progów). Zdrowie padło do zera lub niżej → Goblin pokonany!; jest poniżej 10 → Goblin ledwo zyje; w przeciwnym razie → Goblin walczy dalej.
  6. Pewność siebie (dwa warunki naraz). Jeśli goblin ma tarczę i wciąż ma sporo zdrowia (powyżej 20) — wypisz Goblin czuje sie pewnie.
Po skończeniu sprawdź, czy Twój program:
  • sprawdza broń i nalicza trafienie krytyczne po progu siły,
  • liczy obrażenia rozgałęzieniem, a tarczę warunkiem w warunku,
  • ocenia stan goblina kilkoma progami (pokonany / ledwo żyje / walczy dalej),
  • sprawdza pewność siebie dwoma warunkami naraz i liczy zdrowie po ciosie.
⏳ Python uruchomi się przy pierwszym „Uruchom" (pierwszy raz chwilę trwa).
🧮 Bonus dla dorosłych — „Kalkulator BMI" (nieobowiązkowe, poza bramą)

Bonus dla starszych uczniów: policz BMI i przypisz kategorię z poradą — ten sam zestaw narzędzi (if/elif/else i porównania) co w całym module, ale na realnym, dorosłym przykładzie. Jest poza bramą — możesz go pominąć albo zrobić dla wprawy.

  1. BMI. Policz BMI ze wzoru — waga podzielona przez wzrost podniesiony do kwadratu — i wypisz je z jednym miejscem po przecinku.
  2. Kategoria. Łańcuchem if/elif/else przypisz kategorię wg progów: niedowaga poniżej 18.5, waga prawidłowa do 25, nadwaga do 30, otyłość powyżej.
  3. Porada. Dopisz krótką poradę do każdej kategorii i wypisz kategorię oraz poradę.
⏳ Python uruchomi się przy pierwszym „Uruchom" (pierwszy raz chwilę trwa).
M02

Test końcowy — Decyzje i Warunki

Zdaj test końcowy, żeby odblokować Moduł 03. Próg: 80%. Każde podejście to NOWY zestaw 15 pytań z całego modułu. Prób bez limitu.
📝 Test końcowy — Moduł 02
Sprawdź całą wiedzę z modułu o warunkach. Odpowiedz na wszystkie pytania, potem sprawdź wynik.
4.6

Wzorce pętlowe: filtrowanie i przeliczanie

💭 Ta sama kartka z wynikami, inne pytanie. Bruno nie chce już jednej liczby — chce DRUGĄ listę. Raz: same zwycięstwa, bez przegranych rund. Innym razem: wszystkie wyniki, ale przeliczone na nową skalę, bo turniej zmienił punktację. Oryginał ma zostać nietknięty, a obok niego ma powstać coś nowego.
W poprzedniej sekcji z całej listy wychodziła jedna odpowiedź. Teraz zmienia się cel: z listy ma powstać nowa lista. Oba wzorce, które poznasz, zaczynają się tak samo — od pustej listy przed pętlą i append() w środku. Różnią się jedną rzeczą, za to zasadniczą: filtr decyduje, KTÓRE elementy przejdą, a transformacja zmienia KAŻDY z nich. Zapamiętaj to zdanie — mylenie tych dwóch to najczęstszy błąd przy wzorcach pętlowych.
Wzorzec 3: Filtrowanie. Chcesz wyłowić z listy tylko te elementy, które spełniają jakiś warunek, i zebrać je w osobnej liście. Zaczynasz od pustej listy, a w środku pętli dorzucasz do niej element wyłącznie wtedy, gdy przejdzie test:
Pusta lista na starcie, a potem append() wyłącznie dla elementów spełniających warunek — w efekcie powstaje nowa lista samych zwycięstw, podczas gdy oryginał zostaje nietknięty. To ważne, bo bardzo często chcesz mieć pod ręką i komplet danych, i ich przefiltrowaną wersję obok siebie, żeby móc je porównać albo wrócić do pełnej listy.
Wzorzec 4: Transformacja. Ostatni schemat bierze każdy element listy, przelicza go według jakiejś reguły i wstawia wynik do nowej listy. Tutaj doliczamy każdemu graczowi bonus dziesięciu punktów:
Każdy element oryginalnej listy zostaje przeliczony i wstawiony do nowej — i tym razem różnicę widać gołym okiem, bo wszystkie wyniki urosły o dziesięć. To właśnie odróżnia transformację od filtrowania: filtr decyduje, które elementy zostają, a transformacja zmienia wartość każdego z nich. Oryginalna lista pozostaje nietknięta, dlatego zawsze możesz wrócić do surowych danych, gdy będą Ci jeszcze potrzebne.
append poza warunkiem — filtr, który nikogo nie odsiewa
Gdy append() stoi na tym samym poziomie wcięcia co if zamiast w jego środku, do nowej listy wpadają WSZYSTKIE elementy — warunek nie blokuje niczego, bo dokładanie dzieje się niezależnie od niego.
✅ W filtrze append() musi być wcięty pod if. W transformacji jest odwrotnie: przelicza się każdy element, więc append() stoi poza warunkiem albo w obu gałęziach if / else.
Filtrowanie i transformacja wyglądają niemal identycznie — pusta lista, pętla, append() — a robią co innego. Filtr skraca: nowa lista bywa krótsza od oryginału, czasem nawet zupełnie pusta. Transformacja zachowuje długość: ile elementów weszło, tyle wychodzi, tylko w zmienionej postaci. Dlatego przy takim kodzie wystarczy jedno pytanie kontrolne: czy ktoś ma wypaść, czy każdy ma się zmienić? Odpowiedź od razu mówi, gdzie postawić append().
🤔 Zgadnij albo odpowiedz: Lista [1, -2, 3] przechodzi przez pętlę, w której ujemne zamieniasz na 0, a resztę przepisujesz bez zmian. Ile elementów ma nowa lista?
Odpowiedź
Trzy — [1, 0, 3]. To transformacja, więc nikt nie wypada; gdyby to był filtr odsiewający ujemne, zostałyby dwa.

✔️ Po tej sekcji powinieneś umieć:
  • pisać wzorzec filtrowania: pusta lista + append w środku if
  • pisać wzorzec transformacji: pusta lista + append(przeliczony element)
  • rozpoznać po długości wyniku, czy patrzysz na filtr, czy na transformację
  • wiedzieć, że oryginalna lista zostaje nietknięta — nowa powstaje obok
🧠 Sprawdź wiedzę — 4.6
Wzorce pętlowe działają na płaskich listach. Co z danymi dwuwymiarowymi — mapą gry, tabelą wyników, siatką pikseli? Zagnieżdżone pętle w sekcji 4.7 to klucz do przetwarzania struktur 2D.
Tu napiszesz kod i sprawdzisz go od razu. Bez praktyki przycisk „dalej" pozostaje zablokowany.
🏆

Kurs ukończony — Co dalej?

🎉 Brawo! Przeszedłeś przez 7 modułów Pythona od zera.
Zmienne, warunki, pętle, funkcje, listy, stringi, słowniki — masz to wszystko.
✔️ Co umiesz po tym kursie:
  • Pisać programy, które działają — od pustego pliku do gotowego projektu
  • Używać zmiennych, typów danych i konwersji typów
  • Pisać warunki if/elif/else i zagnieżdżać logikę
  • Budować pętle for i while, sterować nimi przez break i continue
  • Tworzyć własne funkcje i rozumieć zakres zmiennych
  • Pracować z listami, słownikami i metodami stringów
  • Czytać komunikaty błędów i naprawiać kod
Następny krok: Snake XTRA

Python bez Pygame to silnik bez samochodu. W Snake XTRA budujesz grę od zera — okno, ruch węża, zjadanie jedzenia, wynik, rekord. Każdy etap to działający kod, który możesz uruchomić. Żadna wiedza z tego kursu nie idzie w kosz — każda linijka gry opiera się na tym co już umiesz.
🐍 Przejdź do Snake XTRA →
49 PLN · 44 kroki · od okna do pełnej gry