Python – podstawy

Podstawy Pythona dla klasy 8

Podstawy Pythona dla klasy 8

Dziesięć lekcji informatyki: od pierwszego chatbota po zaawansowane debugowanie kodu. Aktualny rok w obliczeniach: 2026.

Lekcja 0Wstęp do Pythona

🎯Po tej lekcji będziesz potrafił:

  • wyjaśnić, skąd wzięła się nazwa języka Python i kto go stworzył,
  • wytłumaczyć techniczną różnicę między językiem kompilowanym a interpretowanym,
  • zauważyć, że kod w Pythonie to w rzeczywistości te same klocki, które znasz ze Scratcha!

📖O czym powinieneś wiedzieć

Krótka historia i nazwa

Python nie ma nic wspólnego z wężem! Język ten został stworzony na początku lat 90. (pierwsza wersja ukazała się w lutym 1991 roku) przez holenderskiego programistę, Guido van Rossuma. Autor był wielkim fanem brytyjskiej grupy komediowej Monty Python, skąd zaczerpnął nazwę. Składnia Pythona charakteryzuje się minimalizmem i przejrzystością — bloki kodu są tu definiowane przez wcięcia, a nie klamry, co wymusza pisanie czytelnego kodu.

Język interpretowany a kompilowany

Program napisany w Pythonie składa się z zestawu instrukcji. Komputer operuje jednak na kodzie maszynowym (zera i jedynki). Proces tłumaczenia kodu może przebiegać na dwa sposoby:

  • Języki kompilowane (np. C++): Zanim program ruszy, specjalny program (kompilator) bierze cały Twój kod i przekształca go od razu na docelowy plik wykonywalny (np. plik z końcówką .exe). Jeśli zmienisz jedną linijkę, musisz skompilować wszystko od nowa. Zaleta? Program uruchamia się i działa bardzo szybko.
  • Języki interpretowane (np. Python): Tutaj nie tworzymy osobnego pliku wykonywalnego. Program zwany interpreterem czyta Twój kod i wykonuje go na bieżąco, linijka po linijce. Jeśli popełnisz błąd w linijce dziesiątej, to pierwsze dziewięć wykona się poprawnie, a program zatrzyma się i wyrzuci błąd dopiero w dziesiątej. To sprawia, że Python jest niezwykle wygodny do nauki i szybkiego testowania (w dowolnej chwili możesz sprawdzić swoją wersję wpisując w terminalu wiersza poleceń komendę python --version).

Scratch vs Python — to te same klocki!

We wcześniejszych klasach programowałeś, układając kolorowe klocki w programie Scratch. Python to język tekstowy, co oznacza, że komendy wpisujemy z klawiatury. Jednak logika pozostaje dokładnie ta sama! Zobaczmy to na przykładzie pobierania imienia i przywitania użytkownika.

W Scratchu, aby zapytać o imię, zapamiętać je i wyświetlić powitanie, musisz połączyć klocki z aż czterech różnych kategorii:

  1. Czujniki (jasnoniebieskie): Używasz klocka zapytaj [Jak masz na imię?] i czekaj. Scratch zapisuje to, co wpisze gracz, w małym, wbudowanym klocku (odpowiedź).
  2. Zmienne (pomarańczowe): Tworzysz nową zmienną (np. o nazwie imię) i używasz klocka ustaw [imię] na (odpowiedź), aby na stałe zapamiętać ten tekst.
  3. Wyrażenia (zielone): Żeby połączyć słowo „Cześć ” z imieniem gracza, używasz klocka połącz [Cześć ] i (imię).
  4. Wygląd (fioletowe): Wkładasz to wszystko do klocka powiedz [...], aby wyświetlić komunikat na ekranie.

W Pythonie robimy dokładnie to samo, ale oszczędzamy mnóstwo klikania, bo załatwiamy to wszystko zaledwie w dwóch krótkich linijkach tekstu!

Co robisz? Wymagane klocki w Scratchu Jak to napisać w Pythonie?
Pytasz i od razu zapisujesz wynik w zmiennej ustaw [imię] na (odpowiedź z zapytaj) imie = input("Jak masz na imię? ")
Łączysz tekst i wyświetlasz na ekranie powiedz [połącz [Cześć ] i (imię)] print("Cześć " + imie)
Podejmujesz decyzję (kategoria Kontrola) Jeżeli (warunek) to... if warunek:

Gdzie w świecie spotkasz Pythona?

Python to podstawa dzisiejszego internetu i nauki. Używają go takie serwisy jak Instagram, Spotify, Netflix czy YouTube. NASA wykorzystuje go do obliczeń, a ponadto jest to absolutny numer jeden w dziedzinie tworzenia Sztucznej Inteligencji (AI).

🧩Sprawdź się teraz w praktyce

1Test wiedzySposób działania programu

Wyobraź sobie, że piszesz program, w którym w linijce 10 zrobiłeś błąd. W którym rodzaju języka program uruchomi pierwsze 9 linijek, zanim zauważy problem, a w którym w ogóle nie wystartuje?

Zobacz rozwiązanie

W języku interpretowanym (czyli w Pythonie) program uruchomi pierwsze 9 linijek poprawnie i wyrzuci błąd dopiero w 10. W języku kompilowanym program w ogóle nie wystartuje, ponieważ kompilator nie zbuduje pliku wykonywalnego, dopóki nie poprawisz błędu.

Lekcja 1Pierwszy chatbot, czyli komunikacja z programem

🎯Po tej lekcji będziesz potrafił:

  • wyświetlić tekst na ekranie za pomocą funkcji print(),
  • pobrać dane od użytkownika funkcją input(),
  • zapisać dane w zmiennej (czyli w pojemniku na informacje),
  • połączyć kilka tekstów w jedno zdanie za pomocą plusa (konkatenacja),
  • samodzielnie napisać działającego chatbota, który prowadzi krótką rozmowę.

📖O czym powinieneś wiedzieć

Program komputerowy to wymiana informacji: wysyłasz komunikat do użytkownika, a on odpowiada. Do wyświetlania tekstu na ekranie służy funkcja print(). Do pobrania tego, co wpisze użytkownik, służy funkcja input(). Dane wpisane przez użytkownika musisz gdzieś zapamiętać — od tego są zmienne. Nadajesz im unikalną nazwę i przypisujesz wartość za pomocą pojedynczego znaku równości, np. imie = "Ola".

Kiedy chcesz połączyć kilka tekstów w jedno zdanie, używasz znaku plus +. Nazywamy to konkatenacją (sklejaniem napisów). Na tej lekcji program jeszcze niczego nie liczy — skupia się wyłącznie na interakcji tekstowej.

chatbot.py
# Pierwszy chatbot - program, który rozmawia z użytkownikiem

print("Cześć! Jestem Twoim pierwszym chatbotem.")   # Przywitanie użytkownika

imie = input("Jak masz na imię? ")        # Pobieramy imię i wkładamy do zmiennej "imie"
print("Miło Cię poznać, " + imie + "!")   # Sklejamy trzy teksty znakiem plus

miasto = input("A gdzie mieszkasz? ")     # Drugie pytanie do użytkownika
print(imie + " mieszka w miejscowości " + miasto + ". Super!")

🖥️Przewidywany wynik

Po uruchomieniu programu i wpisaniu odpowiedzi konsola pokaże:

Cześć! Jestem Twoim pierwszym chatbotem. Jak masz na imię? Ola Miło Cię poznać, Ola! A gdzie mieszkasz? Kraków Ola mieszka w miejscowości Kraków. Super!
Wskazówka: Program zatrzymuje się na instrukcji input() i czeka, aż wpiszesz tekst i naciśniesz Enter.

🧩Sprawdź się teraz w praktyce

1ŁatwyPowitanie

Napisz program, który wyświetli trzy osobne zdania: przywitanie, krótką informację o programie („Jestem samouczkiem”) oraz zaproszenie do pracy. Użyj trzech osobnych wywołań print().

Zobacz rozwiązanie
zad1.py
print("Witaj na lekcji informatyki!")
print("Jestem samouczkiem i pomagam w nauce Pythona.")
print("Rozpocznijmy pracę — wpisuj kody uważnie.")
2ŁatwyImię użytkownika

Zapytaj użytkownika o imię, zapisz je w zmiennej imie, a następnie wyświetl spersonalizowane przywitanie, łącząc teksty znakiem plus.

Zobacz rozwiązanie
zad2.py
imie = input("Jak masz na imię? ")
print("Cześć " + imie + "! Witaj w moim programie.")
3ŚredniKrótki wywiad

Zbuduj program, który zada trzy pytania: o imię, ulubiony przedmiot szkolny oraz ulubione zwierzę. Każdą odpowiedź zapisz w osobnej zmiennej, a na końcu utwórz jedno podsumowujące zdanie.

Zobacz rozwiązanie
zad3.py
imie = input("Jak masz na imię? ")
przedmiot = input("Jaki jest Twój ulubiony przedmiot szkolny? ")
zwierze = input("Jakie jest Twoje ulubione zwierzę? ")

print("Podsumowanie odpowiedzi:")
print(imie + " najbardziej lubi przedmiot: " + przedmiot + " oraz zwierzę: " + zwierze + ".")
4TrudnyGenerator opowieści

Poproś o podanie trzech słów: imienia postaci, miejsca akcji oraz przedmiotu. Następnie utwórz z nich krótką opowieść (przynajmniej dwa zdania), wykorzystując wszystkie pobrane zmienne.

Zobacz rozwiązanie
zad4.py
postać = input("Podaj imię postaci: ")
miejsce = input("Podaj miejsce akcji: ")
przedmiot = input("Podaj przedmiot: ")

print("Pewnego dnia " + postać + " udał się do miejsca znanego jako " + miejsce + ".")
print("Na miejscu odnalazł tajemniczy przedmiot: " + przedmiot + ", który zmienił wszystko.")

⚠️Typowe błędy i jak im możesz zaradzić

Brak cudzysłowów wokół tekstu: print(Cześć) zamiast print("Cześć").Rada: Każdy napis musisz otoczyć cudzysłowami lub apostrofami. Inaczej Python szuka zmiennej o nazwie Cześć i zgłasza błąd NameError.
Niezamknięty nawias: print("Cześć".Rada: Nawiasy zawsze muszą występować w parach. Brak zamknięcia skutkuje błędem SyntaxError.
Sklejanie bez spacji: Wynik „CześćOla” zamiast „Cześć Ola”.Rada: Pamiętaj o dodaniu spacji wewnątrz cudzysłowu, np. "Cześć " + imie.

💬Często zadawane pytania (FAQ)

Czym różni się print() od input()?

print() służy do wypisywania informacji na ekran, a input() zatrzymuje program i pobiera tekst wpisany przez użytkownika.

Czy wielkość liter w nazwach zmiennych ma znaczenie?

Tak. Zmienne imie oraz Imie to dla Pythona dwa zupełnie inne obszary w pamięci.

Lekcja 2Typy danych i ich rozpoznawanie

🎯Po tej lekcji będziesz potrafił:

  • rozpoznać cztery podstawowe typy danych: int, float, str, bool,
  • sprawdzić typ dowolnej wartości lub zmiennej funkcją type(),
  • wyjaśnić różnicę między wartością liczbową 5 a tekstem "5".

📖O czym powinieneś wiedzieć

Każda informacja przetwarzana w Pythonie ma przypisany konkretny typ. Decyduje on o tym, jakie operacje można wykonać na danej zmiennej. Oto podstawowe typy danych, z którymi będziesz pracować:

Typ Nazwa polska Opis Przykłady Jak rozpoznać
str string (ciąg znaków, tekst) Tekst i napisy "Cześć", 'Python', "", " " Zawsze w cudzysłowach "..." lub apostrofach '...'
int integer (liczba całkowita) Liczby całkowite 42, -7, 0, 2026 Cyfry bez przecinka i bez kropki dziesiętnej
float liczba zmiennoprzecinkowa Liczby z częścią ułamkową 3.14, -0.5, 7.0, 0.0 Cyfry zawierające kropkę dziesiętną .
bool boolean (wartość logiczna) Logiczna prawda lub fałsz True, False Tylko dwie wartości, pisane wielką literą, bez cudzysłowów

Jak bezbłędnie odróżnić od siebie typy?

  • String (str): Wszystko, co znajduje się w cudzysłowach. Liczby w cudzysłowach (np. "42") to teksty, nie liczby! Pusty znak "" lub spacja " " to również stringi.
  • Integer (int): Liczby bez kropki dziesiętnej. Zero 0 i liczby ujemne należą do tej grupy.
  • Float: Dowolna liczba z kropką dziesiętną. W Pythonie używamy kropki, nie przecinka. Wartość 5.0 to float, mimo że matematycznie jest równa całkowitej piątce.
  • Boolean (bool): Słowa kluczowe True i False. Napis "True" w cudzysłowie traci swoje właściwości i staje się zwykłym tekstem (str).
typy_danych.py
# Sprawdzanie typów zmiennych funkcją type()

wiek = 15            # Liczba całkowita -> int
srednia = 4.75       # Liczba zmiennoprzecinkowa -> float
klasa = "8a"         # Tekst -> str
zdał = True          # Wartość logiczna -> bool

print("Typ zmiennej wiek:", type(wiek))
print("Typ zmiennej srednia:", type(srednia))
print("Typ zmiennej klasa:", type(klasa))
print("Typ zmiennej zdal:", type(zdał))

# Różnica w działaniu tego samego operatora:
print(5 + 5)         # Wynik: 10 (dodawanie wartości int)
print("5" + "5")     # Wynik: 55 (konkatenacja napisów str)

🖥️Przewidywany wynik

Typ zmiennej wiek: <class 'int’> Typ zmiennej srednia: <class 'float’> Typ zmiennej klasa: <class 'str’> Typ zmiennej zdal: <class 'bool’> 10 55

🧩Sprawdź się teraz w praktyce

1ŁatwySprawdzanie typu wyrażenia

Sprawdź i wyświetleń na ekranie typ wyniku, jaki generuje wyrażenie 5 + 3.0. Dopisz w komentarzu uzasadnienie wyniku.

Zobacz rozwiązanie
zad1.py
wynik = 5 + 3.0
print("Typ wyrażenia 5 + 3.0 wynosi:", type(wynik))
# Uzasadnienie: Python automatycznie promuje int do float podczas działań z liczbą zmiennoprzecinkową.
2ŚredniTyp danych z input()

Pobierz od użytkownika dowolną wartość przez input(), a następnie wypisz komunikat informujący o jej typie danych. Przetestuj program wpisując liczbę.

Zobacz rozwiązanie
zad2.py
dane = input("Wpisz cokolwiek: ")
print("Typ wprowadzonych danych to:", type(dane))
# Wniosek: Funkcja input() zawsze zwraca dane typu str, niezależnie od wpisanej treści.

⚠️Typowe błędy i jak im możesz zaradzić

Błąd łączenia typów: Próba wykonania działania "Wiek: " + 15 wywołuje błąd TypeError.Rada: Nie możesz bezpośrednio łączyć tekstu i liczby znakiem plus. Musisz przekonwertować liczbę na tekst: "Wiek: " + str(15).
Zapis wartości logicznych małą literą: Użycie true lub false.Rada: Słowa kluczowe w Pythonie muszą zaczynać się od wielkiej litery: True oraz False.

Lekcja 3Kalkulatory i rzutowanie typów danych

🎯Po tej lekcji będziesz potrafił:

  • dokonać jawnej konwersji (rzutowania) tekstu na liczby funkcjami int() oraz float(),
  • pobrać dane liczbowe od użytkownika i wykonywać na nich obliczenia,
  • obliczyć przybliżony rok urodzenia na podstawie wieku,
  • zbudować działający algorytm wyliczający wskaźnik BMI.

📖O czym powinieneś wiedzieć

Skoro funkcja input() zawsze zapisuje pobrane znaki jako tekst (str), nie możesz na nich bezpośrednio wykonywać operacji matematycznych (odejmowanie, mnożenie, dzielenie). Próba odjęcia tekstu od liczby spowoduje błąd wykonania. Rozwiązaniem jest rzutowanie typów, czyli jawna konwersja danych.

Funkcja int() przekształca poprawny tekstowy zapis liczby na liczbę całkowitą, natomiast funkcja float() na liczbę zmiennoprzecinkową. Najwygodniej jest dokonać konwersji bezpośrednio podczas pobierania danych: zmienna = int(input()). Do obliczeń wieku przyjmujemy stały rok 2026. Jeśli po wykonaniu obliczeń chcesz połączyć wynik liczbowy z tekstem za pomocą operatora +, pamiętaj o ponownej konwersji na tekst za pomocą funkcji str().

obliczanie_wieku.py
# Program obliczający rok urodzenia — rok bieżący to 2026

AKTUALNY_ROK = 2026
wiek = int(input("Podaj swój wiek: "))   # Konwersja tekstu z input na int

rok_urodzenia = AKTUALNY_ROK - wiek       # Bezpieczne działanie matematyczne
print("Urodziłeś/aś się w okolicach " + str(rok_urodzenia) + " roku.")
kalkulator_bmi.py
# Obliczanie wskaźnika masy ciała BMI

waga = float(input("Podaj swoją wagę w kg (np. 65.5): "))
wzrost = float(input("Podaj swój wzrost w metrach (np. 1.75): "))

bmi = waga / (wzrost ** 2)   # Operator ** oznacza potęgowanie
print("Wskaźnik BMI wynosi: " + str(bmi))

🖥️Przewidywany wynik

Dla przykładowych danych wejściowych (wiek: 14):

Podaj swój wiek: 14 Urodziłeś/aś się w okolicach 2012 roku.

🧩Sprawdź się teraz w praktyce

1ŁatwySuma dwóch liczb

Napisz program, który pobierze od użytkownika dwie liczby całkowite, a następnie obliczy i wyświetli ich sumę.

Zobacz rozwiązanie
zad1.py
liczba1 = int(input("Podaj pierwszą liczbę całkowitą: "))
liczba2 = int(input("Podaj drugą liczbę całkowitą: "))

suma = liczba1 + liczba2
print("Suma podanych liczb wynosi: " + str(suma))
2ŚredniŚrednia ocen

Napisz program pobierający trzy oceny szkolne (mogą być z połówkami, np. 4.5). Oblicz ich średnią arytmetyczną i wyświetl ją na ekranie.

Zobacz rozwiązanie
zad2.py
ocena1 = float(input("Podaj pierwszą ocenę: "))
ocena2 = float(input("Podaj drugą ocenę: "))
ocena3 = float(input("Podaj trzecią ocenę: "))

srednia = (ocena1 + ocena2 + ocena3) / 3
print("Średnia ocen wynosi: " + str(srednia))
3TrudnyOdcięcie części ułamkowej

Przetestuj działanie funkcji int() na bezpośrednio wpisanej w kodzie liczbie zmiennoprzecinkowej int(3.99). Wyświetl wynik i sprawdź w sekcji FAQ, dlaczego nie nastąpiło zaokrąglenie.

Zobacz rozwiązanie
zad3.py
liczba = 3.99
skonwertowana = int(liczba)
print("Wartość oryginalna:", liczba)
print("Po konwersji na int:", skonwertowana) # Wyświetli 3

⚠️Typowe błędy i jak im możesz zaradzić

Wprowadzenie przecinka w liczbie dziesiętnej: Wpisanie „1,75” zamiast „1.75”.Rada: Python akceptuje wyłącznie kropkę jako separator dziesiętny. Wpisanie przecinka wywoła błąd ValueError.
Konwersja tekstu z literami na liczbę: Wywołanie int("abc").Rada: Rzutować na typ liczbowy można tylko te teksty, które zawierają wyłącznie cyfry.

💬Często zadawane pytania (FAQ)

Dlaczego int(3.99) daje wynik 3, a nie 4?

Funkcja int() działając na liczbie zmiennoprzecinkowej całkowicie odcina część ułamkową (wykonuje tradycyjne brakowanie), zamiast zaokrąglać matematycznie. Do zaokrągleń służy funkcja round().

Lekcja 4Operacje matematyczne i magiczne modulo

🎯Po tej lekcji będziesz potrafił:

  • sprawnie stosować operatory arytmetyczne: mnożenie *, dzielenie / oraz potęgowanie **,
  • wykorzystywać operator dzielenia całkowitego //,
  • stosować operator reszty z dzielenia % (modulo) do badania właściwości liczb.

📖O czym powinieneś wiedzieć

Oprócz standardowych działań matematycznych, Python posiada trzy operatory, które znacznie ułatwiają tworzenie algorytmów obliczeniowych. Znak podwójnej gwiazdki ** odpowiada za operację potęgowania (np. 3 ** 3 to 3 do potęgi 3, czyli 27). Podwójny ukośnik // realizuje dzielenie całkowite — zwraca pełną liczbę ile razy dzielnik mieści się w dzielnej, odrzucając całą resztę.

Kluczowym operatorem w informatyce jest modulo, zapisywane jako znak procentu %. Zwraca ono wyłącznie resztę z dzielenia całkowitego. Przykładowo, 17 % 5 daje wynik 2, ponieważ 5 mieści się w 17 trzy razy (15) i zostaje 2 reszty. Jeśli reszta z dzielenia dowolnej liczby przez 2 wynosi 0, oznacza to, że liczba jest parzysta. Z kolei operacja liczba % 10 pozwala wyizolować ostatnią cyfrę dowolnej liczby całkowitej.

operatory_arytmetyczne.py
# Prezentacja zaawansowanych operatorów matematycznych

liczba1 = 17
liczba2 = 5

print("Zwykłe dzielenie (float):", liczba1 / liczba2)   # Wynik: 3.4
print("Dzielenie całkowite (int):", liczba1 // liczba2) # Wynik: 3
print("Reszta z dzielenia (modulo):", liczba1 % liczba2) # Wynik: 2
print("Potęgowanie:", liczba2 ** 3)                     # 5 do potęgi 3, czyli 125

🖥️Przewidywany wynik

Zwykłe dzielenie (float): 3.4 Dzielenie całkowite (int): 3 Reszta z dzielenia (modulo): 2 Potęgowanie: 125

🧩Sprawdź się teraz w praktyce

1ŁatwyPodział zasobów

Napisz program pakujący jajka do wytłaczanek po 6 sztuk. Pobierz od użytkownika łączną liczbę jajek, a następnie wyświetl ile pełnych paczek uda się zapełnić oraz ile jajek zostanie luzem.

Zobacz rozwiązanie
zad1.py
laczna_liczba = int(input("Podaj łączną liczbę jajek: "))

pelne_paczki = laczna_liczba // 6
zostalo_luzem = laczna_liczba % 6

print("Liczba pełnych paczek: " + str(pelne_paczki))
print("Jajka pozostałe luzem: " + str(zostalo_luzem))
2ŚredniIzolowanie cyfry

Pobierz od użytkownika dowolną liczbę dwucyfrową. Wykorzystując poznane operatory matematyczne, wyodrębnij i wyświetl osobno cyfrę dziesiątek oraz cyfrę jedności.

Zobacz rozwiązanie
zad2.py
liczba = int(input("Podaj liczbę dwucyfrową: "))

cyfra_dziesiatek = liczba // 10
cyfra_jednosci = liczba % 10

print("Cyfra dziesiątek: " + str(cyfra_dziesiatek))
print("Cyfra jedności: " + str(cyfra_jednosci))

⚠️Typowe błędy i jak im możesz zaradzić

Używanie daszka do potęgowania: Zapis 2 ^ 3 zamiast 2 ** 3.Rada: Znak ^ w Pythonie nie oznacza potęgowania, lecz operację bitową XOR. Do potęgowania zawsze stosuj **.
Błąd dzielenia przez zero: Próba wykonania 10 / 0 lub 10 % 0.Rada: Interpreter natychmiast zatrzyma działanie programu błędem ZeroDivisionError. Musisz kontrolować wartości dzielników.

Lekcja 5Instrukcja warunkowa i podejmowanie decyzji

🎯Po tej lekcji będziesz potrafił:

  • stosować operatory porównania w celu weryfikacji warunków logicznych,
  • zbudować podstawowe rozgałęzienie programu za pomocą instrukcji if ... else,
  • przestrzegać rygorystycznych zasad Pythona dotyczących stosowania wcięć w kodzie blokowym.

📖O czym powinieneś wiedzieć

Instrukcja warunkowa pozwala na zmianę ścieżki wykonania programu w zależności od spełnienia określonego kryterium. Konstrukcja if bada warunek logiczny. Jeśli zwraca on wartość True, wykonywany jest blok kodu znajdujący się bezpośrednio pod instrukcją. Jeśli warunek zwraca False, program przechodzi do opcjonalnej sekcji else.

Do budowania warunków stosujemy operatory porównania: == (pytanie o równość), != (różne od), >, <, >=, <=. Pamiętaj o fundamentalnej zasadzie Pythona: po instrukcji if oraz else musi pojawić się dwukropek, a cały kod zależny od tej decyzji musi posiadać wcięcie (4 spacje lub jeden tabulator).

decyzje.py
# Sprawdzanie warunków i kontrola wcięć

wiek = int(input("Podaj swój wiek: "))

if wiek >= 18:
    print("Dostęp przyznany. Jesteś osobą pełnoletnią.")  # Kod wcięty
else:
    print("Odmowa dostępu. Brak wymaganych lat.")       # Kod wcięty

# Przykład dla tekstu
odpowiedz = input("Czy lubisz ogórki kiszone? (tak/nie): ")
if odpowiedz == "tak":
    print("O, fajnie, ja też lubię!")
else:
    print("Szkoda, a ja lubię.")

🖥️Przewidywany wynik

Dla odpowiedzi „tak” na drugie pytanie:

Czy lubisz ogórki kiszone? (tak/nie): tak O, fajnie, ja też lubię!

🧩Sprawdź się teraz w praktyce

1ŁatwyWeryfikacja hasła

Napisz program sprawdzający hasło. Jeśli użytkownik wprowadzi tekst "zaliczenie2026", program wypisze „Hasło poprawne”, w przeciwnym razie wyświetli komunikat „Błędne hasło”.

Zobacz rozwiązanie
zad1.py
wpisane_haslo = input("Podaj hasło dostępu: ")

if wpisane_haslo == "zaliczenie2026":
    print("Hasło poprawne.")
else:
    print("Błędne hasło.")
2ŚredniKontrola parzystości

Pobierz liczbę całkowitą i wykorzystując operator modulo, poinformuj użytkownika za pomocą komunikatu, czy podana liczba jest parzysta, czy nieparzysta.

Zobacz rozwiązanie
zad2.py
liczba = int(input("Podaj liczbę całkowitą: "))

if liczba % 2 == 0:
    print("Podana liczba jest parzysta.")
else:
    print("Podana liczba jest nieparzysta.")

⚠️Typowe błędy i jak im możesz zaradzić

Zastosowanie pojedynczego znaku równości w warunku: Zapis if x = 5:.Rada: Pojedynczy znak = wymusza przypisanie wartości do zmiennej. W instrukcjach warunkowych do badania równości zawsze stosuj podwójny znak ==. Spowoduje to błąd SyntaxError.
Pominięcie wcięcia bloku kodu: Brak odsunięcia kodu od lewej krawędzi pod dwukropkiem.Rada: Python przerwie kompilację zgłaszając błąd IndentationError. Wszystkie linie wewnątrz danej decyzji muszą mieć identyczne wcięcie.

Lekcja 6Zaawansowane warunki i zagnieżdżenia

🎯Po tej lekcji będziesz potrafił:

  • tworzyć wielowariantowe drzewa decyzyjne przy użyciu instrukcji elif,
  • łączyć kilka warunków logicznych w jeden za pomocą operatorów and, or oraz not,
  • zbudować zaawansowany program wyliczający aktualny szczebel edukacji.

📖O czym powinieneś wiedzieć

Gdy sytuacja wymaga sprawdzenia więcej niż dwóch wykluczających się możliwości, stosujemy instrukcję elif (skrót od else if). Python analizuje warunki od góry do dołu. Gdy napotka pierwszy spełniony, wykonuje przypisany do niego wcięty blok kodu, a całą resztę struktury decyzyjnej automatycznie pomija.

Do jednoczesnego sprawdzania kilku kryteriów stosujemy operatory logiczne. Słowo kluczowe and zwraca prawdę tylko wtedy, gdy oba warunki składowe są prawdziwe. Operator or wymaga, aby przynajmniej jedna składowa była prawdziwa. Pozwala to na napisanie programu wyliczającego etap szkolny na bazie wieku oraz wieku rozpoczęcia nauki (zakładając standardowy wzór: wiek - wiek_rozpoczecia + 1).

obliczanie_klasy.py
# Wyznaczanie typu szkoły i klasy na podstawie wieku

wiek = int(input("Ile masz lat? "))
wiek_startu = int(input("W jakim wieku zacząłeś pierwszą klasę? (6 lub 7): "))

klasa_ogolna = wiek - wiek_startu + 1

if klasa_ogolna < 1:
    print("Nie chodzisz jeszcze do szkoły.")
elif klasa_ogolna <= 8:
    print("Powinieneś chodzić do klasy " + str(klasa_ogolna) + " szkoły podstawowej.")
elif klasa_ogolna <= 12:
    klasa_srednia = klasa_ogolna - 8
    print("Powinieneś chodzić do klasy " + str(klasa_srednia) + " szkoły średniej.")
else:
    print("Prawdopodobnie ukończyłeś już szkołę średnią.")

🖥️Przewidywany wynik

Dla osoby w wieku 14 lat, która wystartowała w wieku 7 lat:

Ile masz lat? 14 W jakim wieku zacząłeś pierwszą klasę? (6 lub 7): 7 Powinieneś chodzić do klasy 8 szkoły podstawowej.

🧩Sprawdź się teraz w praktyce

1ŚredniWeryfikacja wieku kinomana

Film w kinie dozwolony jest od lat 16, chyba że uczeń znajduje się pod opieką dorosłego. Napisz program, który pyta o wiek oraz o obecność opiekuna (odpowiedź „tak” lub „nie”). Zezwól na wejście, jeśli wiek wynosi co najmniej 16 lat LUB obecny jest opiekun.

Zobacz rozwiązanie
zad1.py
wiek = int(input("Podaj swój wiek: "))
opiekun = input("Czy jesteś pod opieką osoby dorosłej? (tak/nie): ")

if wiek >= 16 or opiekun == "tak":
    print("Możesz wejść na seans kinowy.")
else:
    print("Niestety, wejście na film jest zablokowane.")

⚠️Typowe błędy i jak im możesz zaradzić

Błędna konstrukcja logicznego przedziału: Zapis warunku jako if 13 <= wiek <= 19: może działać w Pythonie, ale próba zapisu skróconego typu if wiek >= 13 and <= 19: jest krytycznym błędem składniowym.Rada: Pamiętaj, aby po operatorze logicznym zawsze powtórzyć pełną nazwę sprawdzanej zmiennej: if wiek >= 13 and wiek <= 19:.

Lekcja 7Kontenery na dane, czyli wprowadzamy listy

🎯Po tej lekcji będziesz potrafił:

  • deklarować i inicjalizować zmienne listowe za pomocą nawiasów kwadratowych [],
  • odczytywać wartości z listy przy użyciu indeksowania dodatniego oraz ujemnego,
  • dynamicznie modyfikować zawartość listy metodami .append() oraz .pop(),
  • wykorzystywać operator przynależności in.

📖O czym powinieneś wiedzieć

Do tej pory jedna zmienna mogła przechowywać tylko jedną informację. Gdy zachodzi potrzeba przechowania zbioru powiązanych obiektów (np. listy przedmiotów w plecaku), idealnie sprawdza się struktura danych nazywana listą. Definiujemy ją umieszczając elementy w nawiasach kwadratowych i rozdzielając je przecinkami: ekwipunek = ["zeszyt", "linijka", "klucze"].

Dostęp do konkretnej pozycji uzyskujemy za pomocą indeksu numerycznego. **Zapamiętaj: w programowaniu elementy numerujemy zawsze od zera!** Indeks 0 oznacza pierwszą pozycję. Indeksy ujemne pozwalają na liczenie pozycji od końca listy: indeks -1 oznacza bezwzględnie ostatni element kolekcji. Łączną liczbę elementów weryfikujemy funkcją len().

operacje_na_listach.py
# Zarządzanie strukturą listy w Pythonie

przedmioty = ["zeszyt", "piórnik", "podręcznik"]

print("Pierwszy element:", przedmioty[0])    # Wyświetli: zeszyt
print("Ostatni element:", przedmioty[-1])     # Wyświetli: podręcznik

# Dodawanie nowego elementu na koniec listy
przedmioty.append("kalkulator")
print("Po dodaniu:", przedmioty)

# Usunięcie ostatniego elementu z listy
przedmioty.pop()
print("Po usunięciu:", przedmioty)

# Badanie przynależności operatorem 'in'
print("Czy jest piórnik?:", "piórnik" in przedmioty) # Zwróci True

🖥️Przewidywany wynik

Pierwszy element: zeszyt Ostatni element: podręcznik Po dodaniu: [’zeszyt’, 'piórnik’, 'podręcznik’, 'kalkulator’] Po usunięciu: [’zeszyt’, 'piórnik’, 'podręcznik’] Czy jest piórnik?: True

🧩Sprawdź się teraz w praktyce

1ŁatwyBudowanie spisu

Stwórz listę zawierającą nazwy trzech Twoich ulubionych dań. Wyświetl pozycję pierwszą, ostatnią oraz łączną długość listy przy użyciu funkcji len().

Zobacz rozwiązanie
zad1.py
dania = ["pizza", "naleśniki", "spaghetti"]

print("Pierwsze danie z listy: " + dania[0])
print("Ostatnie danie z listy: " + dania[-1])
print("Łączna liczba dań wynosi: " + str(len(dania)))
2TrudnyWyszukiwarka zawartości

Stwórz listę zawierającą cztery nazwy miast. Zapytaj użytkownika przez input() o nazwę miasta, którego szuka, a następnie za pomocą operatora in oraz instrukcji if ... else wyświetl informację, czy miasto znajduje się na liście.

Zobacz rozwiązanie
zad2.py
miasta = ["Warszawa", "Kraków", "Gdańsk", "Tarnów"]
szukane = input("Podaj nazwę szukanego miasta: ")

if szukane in miasta:
    print("Tak, to miasto znajduje się w naszej bazie danych!")
else:
    print("Niestety, nie odnaleziono podanego miasta.")

⚠️Typowe błędy i jak im możesz zaradzić

Przekroczenie zakresu indeksu listy: Wywołanie pozycji lista[3] dla listy posiadającej dokładnie 3 elementy.Rada: Pamiętaj o numeracji od zera. Trzyelementowa lista posiada wyłącznie indeksy: 0, 1 oraz 2. Próba sięgnięcia wyżej wywoła błąd krytyczny IndexError.

Lekcja 8Projekt końcowy — tekstowa gra przygodowa

🎯Po tej lekcji będziesz potrafił:

  • skutecznie łączyć zmienne, instrukcje wejścia/wyjścia oraz warunki w jeden zaawansowany algorytm,
  • projektować rozgałęzioną strukturę scenariusza na bazie wyborów tekstowych,
  • zarządzać listą jako stanem ekwipunku i uzależniać wygraną od posiadania kluczowego przedmiotu.

📖O czym powinieneś wiedzieć

Dzisiaj połączysz wszystko, czego się do tej pory nauczyłeś. Gra przygodowa (paragrafowa) opiera się na interaktywnym opisywaniu scen, zbieraniu danych o wyborach gracza i kierowaniu fabuły na odpowiednie tory za pomocą instrukcji warunkowych.

Ekwipunek gracza stworzysz jako początkowo pustą listę []. W miarę postępu rozgrywki i podejmowania decyzji o zbadaniu otoczenia, będziesz dodawać przedmioty metodą .append(). Przy finale gry użyjesz operatora in, aby zweryfikować, czy gracz posiada w inwentarzu przedmiot niezbędny do pomyślnego ukończenia misji.

gra_przygoda.py
# Kompletna gra tekstowa — Zamek tajemnic

print("=== ZAMEK TAJEMNIC ===")
bohater = input("Podaj imię swojego bohatera: ")
ekwipunek = []

print("Witaj, " + bohater + "! Stoisz przed wrotami opuszczonego zamku.")
print("Na ziemi widzisz leżącą, zapaloną pochodnię.")
wybor = input("Czy decydujesz się podnieść pochodnię? (tak/nie): ")

if wybor == "tak":
    ekwipunek.append("pochodnia")
    print("Podniosłeś pochodnię. Pomoże Ci rozświetlić ciemności korytarzy.")
else:
    print("Zostawiłeś pochodnię. W zamkowych lochach będzie całkowicie ciemno.")

print("Wchodzisz do głównej sali. Droga rozchodzi się w lewo i w prawo.")
kierunek = input("W którą stronę udaje się " + bohater + "? (lewo/prawo): ")

if kierunek == "lewo":
    print("Trafiłeś do starego skarbca. Na ołtarzu leży złoty klucz!")
    ekwipunek.append("złoty klucz")
    print("Złoty klucz trafia do Twojego ekwipunku.")
elif kierunek == "prawo":
    print("Wszedłeś do zamkowej kuchni. Znalazłeś tam świeżą kanapkę.")
    ekwipunek.append("kanapka")
else:
    print("Potknąłeś się w ciemności i zostałeś zmuszony do wycofania się.")

print("----------------------------------------")
print("Docierasz do wielkich, stalowych wrót wyjściowych.")
print("Zawartość Twojego plecaka:", ekwipunek)
print("----------------------------------------")

# Sprawdzamy warunek zwycięstwa
if "złoty klucz" in ekwipunek:
    print("Wkładasz złoty klucz do zamka. Wrota otwierają się z głośnym hukiem!")
    print("Udało Ci się uciec z zamku ze skarbem. Gratulacje, wygrałeś grę!")
else:
    print("Próbujesz pchnąć wrota, ale bez złotego klucza ani drgną.")
    print("Zostałeś uwięziony w zamku na zawsze. Przegrałeś rozgrywkę.")

Lekcja 9Słowniczek typowych błędów

🎯Po tej lekcji będziesz potrafił:

  • samodzielnie analizować komunikaty o błędach zgłaszane przez interpreter Pythona,
  • lokalizować dokładną linię kodu, w której wystąpił problem techniczny,
  • błyskawicznie naprawiać najpopularniejsze błędy składniowe, logiczne oraz błędy typów.

🗺️Co oznacza straszny napis „Traceback”?

Zanim przejdziesz do konkretnych błędów, musisz wiedzieć, jak w ogóle czytać komunikaty Pythona. Kiedy program napotyka problem, w konsoli często pojawia się blok tekstu zaczynający się od słów Traceback (most recent call last):. Dla początkujących wygląda to przerażająco, ale to tylko mapa drogowa błędu.

Traceback (most recent call last): File „mój_program.py”, line 4, in <module> wiek = int(input(„Ile masz lat? „)) ValueError: invalid literal for int() with base 10: 'piętnaście’
  • Traceback… – to tylko informacja: „Prześledziłem dla ciebie, jak doszło do awarii”. Zignoruj to zdanie, ono pojawia się zawsze.
  • File „…”, line X – to najważniejsza informacja! Python mówi ci dokładnie, w którym pliku i w której linijce kodu wystąpił problem (tutaj: w linii 4).
  • Ostatnia linijka (ValueError: …) – tutaj znajduje się właściwa nazwa błędu i jego krótki opis. Zawsze czytaj komunikaty o błędach od dołu do góry!

🔍Jak naprawiać konkretne błędy

Kliknij na poniższe nazwy błędów, aby dowiedzieć się, jak skutecznie je naprawiać.

SyntaxError (błąd składni)

Występuje, gdy złamiesz podstawowe zasady gramatyki i zapisu języka Python — to odpowiednik błędu ortograficznego lub interpunkcyjnego w wypracowaniu.

Przykład błędnego kodu:
if odpowiedz = "tak":
Dlaczego nie działa? Użyto pojedynczego znaku =, który w Pythonie służy wyłącznie do przypisywania wartości do zmiennej. Do porównywania zawartości musisz stosować podwójny znak równości.
Prawidłowe rozwiązanie:
if odpowiedz == "tak":
IndentationError (błąd wcięcia)

Python określa przynależność kodu strukturalnego (np. instrukcji pod warunkiem if) za pomocą wcięć od lewej krawędzi. Brak wcięcia uniemożliwia uruchomienie pliku.

Przykład błędnego kodu:
if wiek >= 18:
print("Jesteś pełnoletni!")
Dlaczego nie działa? Komunikat wypisujący tekst znajduje się na tej samej wysokości co słowo kluczowe if, przez co Python nie wie, że ta decyzja ma na niego wpływ.
Prawidłowe rozwiązanie:
if wiek >= 18:
    print("Jesteś pełnoletni!") # Dodano wymagane 4 spacje wcięcia
NameError (błąd nazwy)

Pojawia się w momencie, gdy odwołujesz się do zmiennej lub funkcji, która nie została wcześniej utworzona, lub popełniłeś literówkę w jej nazwie.

Przykład błędnego kodu:
imie = input("Podaj imię: ")
print("Witaj, " + Imie)
Dlaczego nie działa? Python bezwzględnie rozróżnia wielkość liter. Zmienna Imie (z wielkiej litery) nie istnieje — program zna wyłącznie zmienną imie.
Prawidłowe rozwiązanie:
imie = input("Podaj imię: ")
print("Witaj, " + imie)
TypeError (błąd typu)

Występuje, gdy próbujesz wykonać operację niedozwoloną dla danego typu danych (np. zmusić program do odjęcia tekstu od wartości liczbowej).

Przykład błędnego kodu:
wiek = input("Ile masz lat? ")
rok_urodzenia = 2026 - wiek
Dlaczego nie działa? Dane z funkcji input() są traktowane jako tekst (str). Matematyka nie pozwala na odejmowanie tekstu od liczby 2026.
Prawidłowe rozwiązanie:
wiek = int(input("Ile masz lat? ")) # Konwersja tekstu na int
rok_urodzenia = 2026 - wiek
ValueError (błąd wartości)

Występuje, gdy funkcja otrzyma dane właściwego typu, ale ich treść uniemożliwia poprawne przetworzenie (np. próba wymuszenia konwersji liter na cyfry).

Przykład błędnego kodu:
wiek = int(input("Podaj wiek: ")) (Uczeń wpisuje słowo: „piętnaście”)
Dlaczego nie działa? Funkcja int() potrafi zamienić na typ liczbowy wyłącznie teksty składające się tylko i wyłącznie z cyfr (np. „15”). Napis „piętnaście” generuje błąd wartości.
Prawidłowe zachowanie: Podczas testowania programu wprowadzaj wyłącznie wartości numeryczne składające się z cyfr.
ZeroDivisionError (błąd dzielenia przez zero)

Zasada matematyczna mówiąca, że nie wolno dzielić przez zero, obowiązuje również w programowaniu. Próba wykonania takiego działania natychmiast przerywa program.

Przykład błędnego kodu:
wzrost = float(input("Podaj wzrost w metrach: ")) # Użytkownik wpisuje 0
bmi = 60 / (wzrost ** 2)
Dlaczego nie działa? Kwadrat z liczby 0 daje wynik 0, co zmusza Pythona do wykonania niedozwolonego dzielenia wagi przez zero.
Prawidłowe rozwiązanie (zabezpieczenie warunkiem):
wzrost = float(input("Podaj wzrost w metrach: "))
if wzrost > 0:
    bmi = 60 / (wzrost ** 2)
else:
    print("Wzrost musi być większy od zera!")
IndexError (błąd indeksu poza zakresem)

Występuje, gdy próbujesz pobrać lub zmodyfikować element listy, posługując się indeksem, który fizycznie na tej liście nie istnieje.

Przykład błędnego kodu:
oceny = [4, 5, 6]
print(oceny[3])
Dlaczego nie działa? Lista zawiera dokładnie trzy elementy. Pamiętając, że liczymy od zera, poprawne indeksy to: 0, 1 oraz 2. Pozycja o indeksie 3 nie istnieje.
Prawidłowe rozwiązanie:
oceny = [4, 5, 6]
print(oceny[2]) # Wyświetli poprawnie trzecią wartość, czyli 6
Interaktywny samouczek ucznia • informatyka, klasa 8 • Python