Kurs Podstaw Pythona

Sciezka dla poczatkujacych: uporzadkowane notatki, praktyczne przyklady i zadania w stylu LeetCode.

TASKS

Zadania

309 zadań w 25 rozdziałach. Rozwiązuj je w przeglądarce — postęp zapisuje się na tym urządzeniu.

Zacznij od zadania 1.1

Zadania pochodzą z otwartego zbioru Nauka-Programowania na GitHubie — znajdziesz tam też rozwiązania wzorcowe w Pythonie i innych językach.

  1. 1. Interakcja z konsolą24 zadania
  2. 2. Instrukcja warunkowa (if / else)10 zadań
  3. 3. Daty (warunki + kalendarz)9 zadań
  4. 4. Pętle — wprowadzenie (while / for)10 zadań
  5. 5. Pętle — cyfry liczby (dzielenie przez 10, modulo)12 zadań
  6. 6. Funkcje — wprowadzenie17 zadań
  7. 7. Pętle — algorytmy matematyczne10 zadań
  8. 8. Pętle — pętle zagnieżdżone9 zadań
  9. 9. Listy — wprowadzenie21 zadań
  10. 10. Dwie listy i zbiory13 zadań
  11. 11. Napisy — wprowadzenie19 zadań
  12. 12. Napisy — anagramy i palindromy8 zadań
  13. 13. Macierze i przedziały14 zadań
  14. 14. Funkcje — wielomiany7 zadań
  15. 15. Funkcje — rekurencja13 zadań
  16. 16. Bity i systemy liczbowe17 zadań
  17. 17. Słowniki15 zadań
  18. 18. Klasy11 zadań
  19. 19. Dziedziczenie7 zadań
  20. 20. Operacje na plikach15 zadań
  21. 21. Sortowanie i wyszukiwanie — algorytmy7 zadań
  22. 22. Sortowanie — praktyka9 zadań
  23. 23. Wyrażenia regularne13 zadań
  24. 24. Listy — zadania dodatkowe10 zadań
  25. 25. Napisy — zadania dodatkowe9 zadań

Rozdział 1: Interakcja z konsolą

Teoria: Zmienne i konwersja typów, Formatowanie f-string

Wprowadzenie i zasady rozdziału

Poniższe zadania polegają na wczytywaniu danych ze standardowego wejścia (stdin) i wypisywaniu wyniku na standardowe wyjście (stdout).
Każde zadanie (oraz każdy podpunkt w zadaniach wieloczęściowych, np. ZAD-05A … ZAD-05E) jest osobnym, niezależnym programem.

Konwencje wspólne:

  • Każda wartość wejściowa znajduje się w osobnej linii — wczytuj je dokładnie w podanej kolejności (np. float(input())).
  • Jeśli w danych wyjściowych jest „każda w oddzielnej linii” — po każdym wyniku wypisz znak nowej linii.
  • „Do 3 miejsc po przecinku” oznacza wypisanie liczby z dokładnie trzema cyframi po kropce, np. f"{y:.3f}" (19.000, -2.500). Analogicznie dla 2 miejsc.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.
  1. 1.1Wypisywanie tekstu na ekranNapisz program, który wypisze dokładnie: Witaj, świecie!Trudność: ★☆☆
  2. 1.2Zamiana kolejności liczbWczytaj dwie liczby całkowite i wypisz je w odwrotnej kolejności (każdą w osobnej linii).Trudność: ★☆☆
  3. 1.3Rysowanie kształtów znakamiWypisz na wyjście trzy kształty: Kwadrat 2×2 z liter x. Trójkąt liczbowy z 3 linii.Trudność: ★☆☆
  4. 1.4Podstawowe operacje arytmetyczneWczytaj dwie liczby naturalne a i b i wypisz kolejno.Trudność: ★☆☆
  5. 1.5Funkcja liniowa: y = 3x + 10Wczytaj liczbę rzeczywistą x i oblicz wartość funkcji y = 3x + 10.Trudność: ★☆☆
  6. 1.6Funkcja liniowa: y = ax + bWczytaj współczynniki a, b oraz argument x i oblicz wartość funkcji liniowej y = ax + b.Trudność: ★☆☆
  7. 1.7Funkcja sześcienna: y = x³ + 2Wczytaj liczbę rzeczywistą x i oblicz y = x^3 + 2.Trudność: ★☆☆
  8. 1.8Wielomian z potęgami: y = a·x^m + b·x^n + c − aWczytaj współczynniki a, b, c, wykładniki m, n oraz argument x i oblicz.Trudność: ★☆☆
  9. 1.9Funkcja z trygonometrią, wykładniczą i logarytmemWczytaj liczbę rzeczywistą x (kąt w radianach) i oblicz.Trudność: ★★☆
  10. 1.10Kilogramy → gramyWczytaj masę w kilogramach kg i przelicz ją na gramy: g = kg · 1000.Trudność: ★☆☆
  11. 1.11Cale → centymetryWczytaj długość w calach inch i przelicz ją na centymetry: cm = inch · 2.54.Trudność: ★☆☆
  12. 1.12Sekundy → pełne godzinyWczytaj liczbę sekund s i wypisz, ile pełnych godzin się w niej mieści (godzina ma 3600 sekund).Trudność: ★☆☆
  13. 1.13Euro → złotówki (kurs stały)Wczytaj kwotę w euro eur i przelicz ją na złotówki przy stałym kursie 4,40 zł za 1 euro.Trudność: ★☆☆
  14. 1.14Stopnie → radianyWczytaj kąt w stopniach deg i przelicz go na radiany: rad = (deg · π)/180.Trudność: ★☆☆
  15. 1.15Fahrenheit → Celsius i KelvinyWczytaj temperaturę w stopniach Fahrenheita F. Oblicz temperaturę w stopniach Celsjusza oraz w kelwinach.Trudność: ★☆☆
  16. 1.16Pole trójkątaWczytaj długość podstawy a i wysokość h trójkąta i oblicz jego pole ze wzoru P = 1/2 a h.Trudność: ★☆☆
  17. 1.17Pole prostokątaWczytaj długości boków prostokąta a i b i oblicz jego pole ze wzoru P = a b.Trudność: ★☆☆
  18. 1.18Pole rombuWczytaj długości przekątnych rombu d_1 i d_2 i oblicz jego pole ze wzoru P = 1/2 d_1 d_2.Trudność: ★☆☆
  19. 1.19Objętość kuliWczytaj promień kuli r i oblicz jej objętość ze wzoru V = 4/3π r^3.Trudność: ★☆☆
  20. 1.20Objętość stożkaWczytaj promień podstawy r i wysokość h stożka i oblicz jego objętość ze wzoru V = 1/3π r^2 h.Trudność: ★☆☆
  21. 1.21Objętość prostopadłościanuWczytaj długości krawędzi prostopadłościanu a, b, c i oblicz jego objętość ze wzoru V = a b c.Trudność: ★☆☆
  22. 1.22Koszt pokrycia podłogi płytkamiDane są.Trudność: ★★☆
  23. 1.23Kalkulator kredytowyWczytaj: roczną stopę procentową R (w procentach), okres spłaty Y (w latach), kwotę kredytu P.Trudność: ★★☆
  24. 1.24Sekundy → format GG:MM:SSWczytaj liczbę sekund s i zapisz ją jako czas w formacie GG:MM:SS.Trudność: ★☆☆

Rozdział 2: Instrukcja warunkowa (if / else)

Teoria: Warunki (if / elif / else)

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale ćwiczą podejmowanie decyzji w programie na podstawie warunków.

Konwencje wspólne:

  • Każde zadanie jest osobnym programem: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Dane wejściowe wczytuj dokładnie w podanej kolejności, każdą wartość z osobnej linii (o ile nie napisano inaczej).
  • Wyniki wypisuj dokładnie jak w specyfikacji (w tym wielkość liter, polskie znaki, kropki, spacje).
  • Jeżeli zadanie mówi „nie wypisuj nic” — program ma zakończyć się bez żadnego wyjścia (bez spacji, bez pustej linii).
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.
  1. 2.1Liczba większa od 5Wczytaj jedną liczbę naturalną n. Jeśli n > 5, wypisz n. W przeciwnym razie nie wypisuj nic.Trudność: ★☆☆
  2. 2.2Porównanie dwóch liczbWczytaj dwie liczby naturalne a i b. Jeśli są równe, wypisz: Liczby są identyczne.Trudność: ★☆☆
  3. 2.3Określanie znaku liczbyWczytaj liczbę całkowitą x i wypisz jeden z komunikatów: dla x < 0: Liczba jest ujemna.Trudność: ★☆☆
  4. 2.4Maksimum i minimum z dwóch liczbWczytaj dwie liczby naturalne a i b. Wypisz je w jednej linii w kolejności.Trudność: ★☆☆
  5. 2.5Sortowanie trzech liczbWczytaj trzy liczby naturalne a, b, c i wypisz je w kolejności niemalejącej (od najmniejszej do największej).Trudność: ★★☆
  6. 2.6Maksimum z czterech liczbWczytaj cztery liczby naturalne i wypisz największą z nich.Trudność: ★☆☆
  7. 2.7Prawa logiki (p, q, r)Wczytaj wartości logiczne p, q i r i sprawdź dla nich osiem praw logiki.Trudność: ★★☆
  8. 2.8Czy można zbudować trójkąt?Wczytaj trzy dodatnie długości odcinków a, b, c. Sprawdź, czy można z nich zbudować trójkąt (niezdegenerowany).Trudność: ★☆☆
  9. 2.9Ocena z punktówWczytaj liczbę punktów zdobytych na sprawdzianie i wypisz ocenę według progów.Trudność: ★☆☆
  10. 2.10Prosty kalkulatorWczytaj liczbę a, operator i liczbę b, a następnie wypisz wynik działania a <operator> b.Trudność: ★★☆

Rozdział 3: Daty (warunki + kalendarz)

Teoria: Warunki (if / elif / else)

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale dotyczą walidacji i obliczeń na datach w kalendarzu gregoriańskim.

Konwencje wspólne:

  • Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Liczby wczytuj z osobnych linii, w kolejności z opisu. Data jest zawsze podawana jako trzy liczby: dzień, miesiąc, rok.
  • Komunikaty wypisuj dokładnie jak w treści (kropki, polskie znaki, wielkość liter, spacje).
  • Jeśli zadanie mówi „nie wypisuj nic” — program kończy się bez żadnego wyjścia.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.
  • We wszystkich zadaniach obowiązuje kalendarz gregoriański (także dla lat sprzed 1582 roku). Rok jest przestępny, gdy jest podzielny przez 4 i nie jest podzielny przez 100, albo gdy jest podzielny przez 400 (np. 2024 i 2000 są przestępne, a 2023 i 1900 — nie). Luty ma w roku przestępnym 29 dni, a w nieprzestępnym 28.
  1. 3.1Numer dnia tygodnia lub miesiącaWczytaj liczbę całkowitą n i sprawdź, czy może być numerem dnia tygodnia (1–7) i czy może być numerem miesiąca (1–12).Trudność: ★☆☆
  2. 3.2Pełnoletność (18 lat)Wczytaj datę urodzenia oraz datę „dzisiejszą” i sprawdź, czy osoba ma ukończone 18 lat w dniu daty dzisiejszej.Trudność: ★☆☆
  3. 3.3Rok przestępnyWczytaj rok y i sprawdź, czy jest przestępny w kalendarzu gregoriańskim.Trudność: ★☆☆
  4. 3.4Dzień tygodnia z numeruWczytaj liczbę n. Jeśli n jest w zakresie 1–7, wypisz nazwę dnia tygodnia.Trudność: ★☆☆
  5. 3.5Liczba dni w miesiącu (rok nieprzestępny)Wczytaj numer miesiąca m. Zakładając rok nieprzestępny, wypisz liczbę dni w tym miesiącu.Trudność: ★☆☆
  6. 3.6Sprawdzanie poprawności datyWczytaj d, m, y i sprawdź, czy jest to poprawna data w kalendarzu gregoriańskim.Trudność: ★★☆
  7. 3.7Dzień roku (liczba dni od 1 stycznia, włącznie)Wczytaj datę d, m, y i oblicz numer dnia w roku, tzn.Trudność: ★★☆
  8. 3.8Dzień tygodnia dla daty (Zeller)Wczytaj datę d, m, y i wyznacz nazwę dnia tygodnia, używając kongruencji Zellera dla kalendarza gregoriańskiego.Trudność: ★★☆
  9. 3.9Dni między datami (moduł datetime)Wczytaj dwie daty i za pomocą modułu datetime z biblioteki standardowej Pythona oblicz.Trudność: ★★☆

Rozdział 4: Pętle — wprowadzenie (while / for)

Teoria: Pętle for i while, Pętla while, Wyjątki: try / except

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale ćwiczą powtarzanie instrukcji za pomocą pętli while i for: wczytywanie danych aż do spełnienia warunku, wypisywanie ciągów liczb, sumowanie i proste obliczenia.

Konwencje wspólne:

  • Każde zadanie (i każdy podpunkt) to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.
  • Dane wejściowe wczytuj dokładnie w podanej kolejności, każdą wartość z osobnej linii (o ile nie napisano inaczej).
  • Jeśli wynik ma być „każdy w osobnej linii”, po każdej wartości wypisz znak nowej linii.
  • Jeśli zadanie mówi, że w danym przypadku nic nie trzeba wypisywać, program nie wypisuje nic (nawet pustej linii).
  1. 4.1Warunek kończący pętlęWczytuj kolejne liczby naturalne (każdą z osobnej linii), dopóki nie wczytasz liczby 7.Trudność: ★☆☆
  2. 4.2Wypisywanie liczb mniejszych od podanejWczytaj liczbę naturalną n i wypisz wszystkie liczby naturalne dodatnie mniejsze od n w kolejności malejącej — od n…Trudność: ★☆☆
  3. 4.3Wypisywanie liczby π z rosnącą dokładnościąWczytaj liczbę naturalną n i wypisz liczbę π w n liniach.Trudność: ★☆☆
  4. 4.4Sumowanie liczb mniejszych od podanejWczytaj liczbę naturalną n i za pomocą pętli oblicz sumę wszystkich liczb naturalnych dodatnich mniejszych od n, czyli…Trudność: ★☆☆
  5. 4.5Liczby z przedziałuWczytaj dwie liczby naturalne a i b. Niech lo będzie mniejszą, a hi większą z nich.Trudność: ★☆☆
  6. 4.6Sumowanie elementów ciąguWczytaj liczbę naturalną n i za pomocą pętli oblicz trzy sumy: a) _k=1^n (k^2 + k + 1) b) _k=1^n (k^2 + 5k) c) _k=1^n 3kTrudność: ★☆☆
  7. 4.7Potęgowanie liczby πWczytaj liczbę naturalną n i oblicz π^n, mnożąc w pętli liczbę π przez siebie.Trudność: ★☆☆
  8. 4.8Obliczanie liczby kur i owiec na farmieNa farmie są wyłącznie kury i owce. Każde zwierzę ma jedną głowę, kura ma 2 nogi, a owca 4 nogi.Trudność: ★★☆
  9. 4.9Ciąg CollatzaCiąg Collatza zaczyna się od liczby n. Każdy kolejny wyraz powstaje z poprzedniego x według reguły.Trudność: ★☆☆
  10. 4.10Walidacja danych wejściowychProgram prosi o liczbę całkowitą z przedziału [1, 100] i nie poddaje się, dopóki jej nie dostanie.Trudność: ★★☆

Rozdział 5: Pętle — cyfry liczby (dzielenie przez 10, modulo)

Teoria: Pętla while

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale ćwiczą wyznaczanie cyfr liczby w pętli: ostatnią cyfrę liczby n daje n % 10, a dzielenie całkowite n // 10 usuwa ją z liczby.

Konwencje wspólne:

  • Każde zadanie (i każdy podpunkt) to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.
  • „Cyfry od końca” oznacza kolejność od cyfry jedności do najwyższej cyfry (tak, jak wyznacza je n % 10 i n // 10).
  • Liczba 0 ma jedną cyfrę: 0.
  • Jeśli zadanie mówi, że w danym przypadku nic nie trzeba wypisywać, program nie wypisuje nic (nawet pustej linii).
  1. 5.1Liczenie cyfr w liczbieWczytaj liczbę naturalną n i wypisz, z ilu cyfr składa się jej zapis dziesiętny.Trudność: ★☆☆
  2. 5.2Wypisywanie cyfr liczby w odwrotnej kolejnościWczytaj liczbę naturalną n i wypisz jej cyfry od końca — zaczynając od cyfry jedności, a kończąc na najwyższej cyfrze.Trudność: ★☆☆
  3. 5.3Sumowanie cyfr liczbyWczytaj liczbę naturalną n, oblicz sumę jej cyfr i wypisz wynik.Trudność: ★☆☆
  4. 5.4Cyfry parzysteWczytaj liczbę naturalną n i wypisz od końca wszystkie jej cyfry, które są parzyste.Trudność: ★☆☆
  5. 5.5Cyfry mniejsze niż 5Wczytaj liczbę naturalną n i wypisz od końca wszystkie jej cyfry, które są mniejsze niż 5.Trudność: ★☆☆
  6. 5.6Cyfry różne od zeraWczytaj liczbę naturalną n i wypisz od końca wszystkie jej cyfry, które są różne od zera.Trudność: ★☆☆
  7. 5.7Sprawdzanie, czy liczba jest palindromemWczytaj liczbę naturalną n i sprawdź, czy jest palindromem, czyli czy czytana od końca jest taka sama (np.Trudność: ★★☆
  8. 5.8Liczby mniejsze od n o sumie cyfr równej 10Wczytaj liczbę naturalną n.Trudność: ★★☆
  9. 5.9Trzycyfrowe o sumie cyfr równej nWczytaj liczbę naturalną n.Trudność: ★★☆
  10. 5.10Trzycyfrowe podzielne przez sumę cyfr liczby nWczytaj liczbę naturalną n i oblicz sumę jej cyfr s.Trudność: ★★☆
  11. 5.11Mniejsze od n złożone wyłącznie z parzystych cyfrWczytaj liczbę naturalną n.Trudność: ★★☆
  12. 5.12Algorytm Luhna (numer karty)Numery kart płatniczych mają ostatnią cyfrę kontrolną, dzięki której łatwo wykryć literówkę.Trudność: ★★☆

Rozdział 6: Funkcje — wprowadzenie

Teoria: Funkcje, Testy i asercje

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale uczą pisania funkcji: definiowania ich instrukcją def, przekazywania argumentów i zwracania wyniku instrukcją return.

Konwencje wspólne:

  • Każde zadanie (i każdy podpunkt a, b, c…) to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Treść mówi, jaką funkcję napisać (nazwa, parametry, zwracana wartość). Program wczytuje dane, wywołuje funkcję i wypisuje zwrócony przez nią wynik.
  • „Funkcja zwraca” oznacza użycie instrukcji return. Funkcja nie wczytuje danych i nie wypisuje wyniku sama — robi to reszta programu (chyba że treść zadania mówi inaczej).
  • Sekcja „Kod startowy” zawiera gotowy szkielet: nagłówek funkcji oraz linie, które wczytują dane i wypisują wynik. Wystarczy uzupełnić ciało funkcji.
  • Liczby na wejściu podane są w osobnych liniach — wczytuj je dokładnie w podanej kolejności.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.
  1. 6.1Zwracanie stałej wartości: liczba 3Napisz bezargumentową funkcję zwroc_liczbe(), która zwraca liczbę całkowitą 3.Trudność: ★☆☆
  2. 6.2Zwracanie stałej wartości: napis „Tak”Napisz bezargumentową funkcję zwroc_napis(), która zwraca napis Tak. Program wywołuje funkcję i wypisuje zwrócony wynik.Trudność: ★☆☆
  3. 6.3Zwracanie stałej wartości: TrueNapisz bezargumentową funkcję zwroc_prawda(), która zwraca wartość logiczną True.Trudność: ★☆☆
  4. 6.4Suma dwóch liczbNapisz funkcję suma(a, b), która zwraca sumę a + b dwóch liczb całkowitych.Trudność: ★☆☆
  5. 6.5Różnica: b − aNapisz funkcję roznica(a, b), która zwraca różnicę b - a (od drugiej liczby odejmujemy pierwszą).Trudność: ★☆☆
  6. 6.6Iloczyn dwóch liczbNapisz funkcję iloczyn(a, b), która zwraca iloczyn a · b. Program wczytuje a i b, wywołuje funkcję i wypisuje wynik.Trudność: ★☆☆
  7. 6.7Iloraz całkowity: a // bNapisz funkcję iloraz(a, b), która zwraca iloraz całkowity a // b.Trudność: ★☆☆
  8. 6.8Reszta z dzielenia: a % bNapisz funkcję reszta(a, b), która zwraca resztę z dzielenia a % b.Trudność: ★☆☆
  9. 6.9Sprawdzanie warunków logicznychNapisz funkcję sprawdz_warunki(a, b), która dla dwóch liczb naturalnych zwraca krotkę czterech wartości logicznych…Trudność: ★☆☆
  10. 6.10Minimum z dwóch liczbNapisz funkcję min_z_dwoch(a, b), która zwraca mniejszą z dwóch liczb naturalnych.Trudność: ★☆☆
  11. 6.11Maksimum z trzech liczbNapisz funkcję max_z_trzech(a, b, c), która zwraca największą z trzech liczb naturalnych.Trudność: ★☆☆
  12. 6.12Zamiana wartości miejscamiNapisz funkcję zamien_wartosci(a, b), która zwraca dwie otrzymane wartości w odwróconej kolejności, czyli parę (b, a).Trudność: ★☆☆
  13. 6.13Suma cyfr liczby (funkcja)Napisz funkcję suma_cyfr(n), która zwraca sumę cyfr liczby naturalnej n.Trudność: ★☆☆
  14. 6.14Weryfikacja nazwy użytkownika i hasłaNapisz dwie funkcje.Trudność: ★★☆
  15. 6.15Cena końcowa (argumenty domyślne i nazwane)Napisz funkcję cena_koncowa(netto, vat=23, rabat=0), która zwraca cenę brutto towaru po rabacie.Trudność: ★☆☆
  16. 6.16Średnia z dowolnej liczby argumentówNapisz funkcję srednia(liczby), którą można wywołać z dowolną liczbą argumentów — np.Trudność: ★★☆
  17. 6.17Funkcja sprawdzona testami (assert)Napisz funkcję czy_przestepny(rok), która zwraca True, jeśli rok jest przestępny, a False w przeciwnym razie.Trudność: ★☆☆

Rozdział 7: Pętle — algorytmy matematyczne

Teoria: Pętle for i while, Funkcje

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale łączą pętle z funkcjami: implementujesz klasyczne algorytmy matematyczne (potęgowanie, silnia, NWD, NWW, pierwiastek, test pierwszości) bez gotowych funkcji bibliotecznych.

Konwencje wspólne:

  • Każde zadanie (i każdy podpunkt) to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.
  • Jeśli zadanie mówi „napisz funkcję”, zaimplementuj funkcję o podanej nazwie, która zwraca wynik przez return. Program wczytuje dane, wywołuje funkcję i wypisuje wynik — gotowy szkielet znajdziesz w sekcji Kod startowy.
  • Dane wejściowe wczytuj dokładnie w podanej kolejności, każdą wartość z osobnej linii.
  1. 7.1Średnia, minimum i maksimum z n liczbWczytaj liczbę n, a następnie w pętli n liczb (każdą z osobnej linii).Trudność: ★☆☆
  2. 7.2Potęgowanie liczby przy pomocy pętliNapisz funkcję potega(a, b), która zwraca a^b obliczone przy użyciu pętli — bez operatora i funkcji pow().Trudność: ★☆☆
  3. 7.3Mnożenie przy pomocy dodawaniaNapisz funkcję iloczyn(a, b), która zwraca a · b obliczone przy użyciu tylko dodawania i pętli (bez operatora *).Trudność: ★☆☆
  4. 7.4Dzielenie całkowite przy pomocy odejmowaniaNapisz funkcję iloraz(a, b), która zwraca wynik dzielenia całkowitego a // b obliczony przy użyciu tylko odejmowania i…Trudność: ★☆☆
  5. 7.5Obliczanie silni liczbyNapisz funkcję silnia(n), która zwraca n! = 1 · 2 · … · n obliczone przy użyciu pętli.Trudność: ★☆☆
  6. 7.6Największy wspólny dzielnik (NWD)Napisz funkcję nwd(a, b), która zwraca największy wspólny dzielnik liczb a i b.Trudność: ★☆☆
  7. 7.7Najmniejsza wspólna wielokrotność (NWW)Napisz funkcję nww(a, b), która zwraca najmniejszą wspólną wielokrotność liczb a i b.Trudność: ★☆☆
  8. 7.8Pierwiastek metodą Newtona (Herona)Napisz funkcję pierwiastek(n), która zwraca przybliżenie √(n) obliczone metodą Newtona (Herona), bez użycia…Trudność: ★★☆
  9. 7.9Naiwny test pierwszości liczbyNapisz funkcję czy_pierwsza(n), która zwraca True, jeśli n jest liczbą pierwszą, a w przeciwnym razie False.Trudność: ★★☆
  10. 7.10Rozkład na czynniki pierwszeNapisz funkcję wypisz_rozklad(n), która wypisuje rozkład liczby n na czynniki pierwsze.Trudność: ★★☆

Rozdział 8: Pętle — pętle zagnieżdżone

Teoria: Zagnieżdżone pętle, Formatowanie f-string

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale ćwiczą pętle zagnieżdżone: pętla zewnętrzna przechodzi po wierszach, a wewnętrzna po kolumnach. W ten sposób rysujemy figury ze znaków, budujemy tabele liczb i przeszukujemy kolejne liczby.

Konwencje wspólne:

  • Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Program nie wypisuje komunikatów typu „Podaj n:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.
  • Każdy wiersz figury lub tabeli wypisz w osobnej linii.
  • W rysunkach spacje na początku i w środku wiersza są istotne. Spacje na końcu wiersza są ignorowane przez sprawdzarkę, więc nie musisz ich wypisywać.
  1. 8.1KwadratWczytaj liczbę naturalną n i wypisz kwadrat o boku n zbudowany z gwiazdek *.Trudność: ★☆☆
  2. 8.2Trójkąt prostokątny (rosnący)Wczytaj liczbę naturalną n i wypisz trójkąt o wysokości n: w wierszu numer i (licząc od 1) ma być i gwiazdek.Trudność: ★☆☆
  3. 8.3Trójkąt prostokątny (malejący)Wczytaj liczbę naturalną n i wypisz odwrócony trójkąt o wysokości n.Trudność: ★☆☆
  4. 8.4Tabliczka mnożenia N × NWczytaj liczbę naturalną N i wypisz tabliczkę mnożenia o wymiarach N × N.Trudność: ★★☆
  5. 8.5Litera XWczytaj liczbę naturalną n i wypisz literę X o wysokości i szerokości n, zbudowaną z gwiazdek leżących na obu…Trudność: ★★☆
  6. 8.6Litera ZWczytaj liczbę naturalną n i wypisz literę Z o wysokości i szerokości n.Trudność: ★★☆
  7. 8.7Choinka z N trójkątówWczytaj liczbę naturalną N i wypisz choinkę złożoną z N trójkątów ustawionych jeden pod drugim.Trudność: ★★☆
  8. 8.8Trójkąt PascalaWczytaj liczbę naturalną n i wypisz n pierwszych wierszy trójkąta Pascala.Trudność: ★★☆
  9. 8.9N pierwszych liczb pierwszychWczytaj liczbę naturalną N i wypisz N pierwszych liczb pierwszych w jednej linii, w kolejności rosnącej.Trudność: ★★☆

Rozdział 9: Listy — wprowadzenie

Teoria: Listy, Liczby losowe i random.seed

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale ćwiczą podstawowe operacje na listach: wczytywanie, przechodzenie pętlą, modyfikowanie elementów, wyszukiwanie i zliczanie.

Konwencje wspólne:

  • Każde zadanie (i każdy podpunkt) to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Lista na wejściu zajmuje dwie linie: w 1. linii jest liczba elementów n, a w 2. linii — n liczb oddzielonych pojedynczymi spacjami. Dodatkowe dane (np. szukany klucz) są w kolejnych liniach, po jednej wartości w linii.
  • Taką listę wczytasz np. tak:
    ```python
    n = int(input())
    lista = [int(x) for x in input().split()]
    `
  • Gdy wynikiem jest lista, wypisz ją instrukcją print(lista). Python wypisze ją w nawiasach kwadratowych, z elementami oddzielonymi przecinkiem i spacją, np. [4, 10, 8]. Pusta lista to [].
  • Jeśli zadanie mówi „oddzielone spacją” — użyj pojedynczej spacji.
  • Indeksy elementów liczymy od 0.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.
  1. 9.1Wczytaj i wypiszWczytaj listę n liczb całkowitych, a następnie.Trudność: ★☆☆
  2. 9.2Wczytaj, zmodyfikuj i wypiszWczytaj listę n liczb całkowitych.Trudność: ★☆☆
  3. 9.3Pierwsze wystąpienie kluczaWczytaj listę n liczb całkowitych oraz liczbę klucz. Wypisz indeks pierwszego wystąpienia liczby klucz w liście.Trudność: ★☆☆
  4. 9.4Minimum oraz maksimumWczytaj listę n liczb całkowitych. Wypisz największą, a po niej najmniejszą liczbę z listy.Trudność: ★☆☆
  5. 9.5Zmodyfikuj elementy spełniające warunekWczytaj listę n liczb całkowitych.Trudność: ★☆☆
  6. 9.6Czy średnia elementów znajduje się w liście?Wczytaj listę n liczb całkowitych.Trudność: ★☆☆
  7. 9.7Średnia dwóch największych liczbWczytaj listę n liczb naturalnych. Znajdź dwa największe elementy listy i wypisz ich średnią arytmetyczną.Trudność: ★☆☆
  8. 9.8Usuń kluczWczytaj listę n liczb całkowitych oraz liczbę klucz.Trudność: ★☆☆
  9. 9.9Usuń duplikaty (z zachowaniem kolejności)Wczytaj listę n liczb naturalnych i usuń z niej duplikaty tak, aby każda liczba występowała tylko raz — zachowując…Trudność: ★☆☆
  10. 9.10Czy punkty mogą być wierzchołkami trójkąta?Wczytaj współrzędne trzech punktów A(x_A, y_A), B(x_B, y_B), C(x_C, y_C).Trudność: ★★☆
  11. 9.11Samochody jadące w przeciwnych kierunkachWczytaj n oraz napis długości n złożony z liter A i B, opisujący samochody na drodze.Trudność: ★★☆
  12. 9.12Rotacja w lewo / prawoWczytaj listę n liczb całkowitych, kierunek rotacji oraz liczbę k. Przesuń cyklicznie elementy listy o k pozycji.Trudność: ★★☆
  13. 9.13Brakujący element w ciągu arytmetycznymWczytaj listę n liczb naturalnych.Trudność: ★★☆
  14. 9.14Element bez paryWczytaj listę n liczb całkowitych.Trudność: ★★☆
  15. 9.15Element dominującyWczytaj listę n liczb naturalnych. Jeśli istnieje wartość, która występuje w liście więcej niż n/2 razy, wypisz ją.Trudność: ★★☆
  16. 9.16Indeksy pierwszej pary o sumie xWczytaj listę n liczb całkowitych oraz liczbę x. Znajdź indeksy i, j (gdzie i < j) takie, że lista[i] + lista[j] == x.Trudność: ★★☆
  17. 9.17Wszystkie pary o sumie x (wartości)Wczytaj listę n liczb całkowitych oraz liczbę x.Trudność: ★★☆
  18. 9.18Indeks najmniejszego elementu w przesuniętej liścieWczytaj listę n różnych liczb całkowitych, która była posortowana rosnąco, a następnie została cyklicznie przesunięta…Trudność: ★★☆
  19. 9.19Wycinki listyWczytaj listę n liczb całkowitych oraz liczbę k. Wypisz kolejno.Trudność: ★☆☆
  20. 9.20Wyrażenia listoweWczytaj listę n liczb całkowitych i utwórz z niej trzy nowe listy — każdą jednym wyrażeniem listowym.Trudność: ★☆☆
  21. 9.21Rzuty kostką z ziarnemZasymuluj n rzutów sześcienną kostką do gry i policz, ile razy wypadła każda liczba oczek.Trudność: ★☆☆

Rozdział 10: Dwie listy i zbiory

Teoria: Listy, Iteracja z enumerate i zip, Zbiory

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale ćwiczą jednoczesną pracę na dwóch listach (lub dwóch napisach traktowanych jak ciągi znaków): łączenie, porównywanie, przechodzenie po indeksach i scalanie list posortowanych. Pod koniec rozdziału poznasz zbiory (set) — kolekcje bez powtórzeń, które pozwalają jednym działaniem wyznaczyć część wspólną, sumę czy różnicę dwóch list — oraz funkcje zip i enumerate, ułatwiające przechodzenie po dwóch ciągach naraz.

Konwencje wspólne:

  • Każde zadanie jest osobnym programem: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Program nie wypisuje komunikatów typu „Podaj listę:”.
  • Każda lista zajmuje na wejściu jedną linię, a jej elementy są oddzielone pojedynczymi spacjami, np. 5 3 7 2. Najpierw podana jest lista 1, w następnej linii lista 2. Każda lista ma co najmniej jeden element.
  • Listę liczb całkowitych wczytasz tak: lista = [int(x) for x in input().split()] (dla liczb zmiennoprzecinkowych użyj float zamiast int).
  • Gdy wynikiem jest lista, wypisz ją tak, jak robi to print(lista) w Pythonie: w nawiasach kwadratowych, elementy oddzielone przecinkiem i spacją, np. [1, 2, 3]. Pusta lista to [].
  • Gdy treść mówi o elementach „oddzielonych przecinkami bez spacji”, wypisz je w jednej linii, np. 5,1,3, bez przecinka na końcu — np. print(*lista, sep=",").
  1. 10.1Wypisanie elementów dwóch list na przemianWczytaj dwie listy liczb całkowitych i wypisz ich elementy na przemian.Trudność: ★☆☆
  2. 10.2Połączenie dwóch listWczytaj dwie listy liczb całkowitych i utwórz z nich dwie nowe listy.Trudność: ★☆☆
  3. 10.3Suma elementów dwóch listWczytaj dwie listy liczb całkowitych i utwórz listę, w której element o indeksie i jest sumą elementów o indeksie i z…Trudność: ★☆☆
  4. 10.4Iloczyn skalarny dwóch wektorów 3DWczytaj dwa wektory w przestrzeni trójwymiarowej, A = [A_x, A_y, A_z] oraz B = [B_x, B_y, B_z], i oblicz ich iloczyn…Trudność: ★☆☆
  5. 10.5Obliczenie średniej ważonejWczytaj dwie listy liczb zmiennoprzecinkowych tej samej długości.Trudność: ★☆☆
  6. 10.6Znalezienie elementów wspólnych dwóch listWczytaj dwie listy liczb całkowitych i utwórz listę elementów, które występują w obu listach.Trudność: ★☆☆
  7. 10.7Różnica między dwoma listamiWczytaj dwie listy liczb całkowitych i utwórz listę elementów, które występują tylko w jednej z list (tzw.Trudność: ★☆☆
  8. 10.8Połącz posortowane listy w posortowaną listę bez duplikatówWczytaj dwie listy liczb całkowitych, każdą posortowaną niemalejąco, i scal je w jedną listę, która.Trudność: ★★☆
  9. 10.9Usuń z pierwszej listy część wspólną obu listWczytaj dwie listy liczb całkowitych. Usuń z listy 1 wszystkie elementy (także powtórzenia), które występują w liście 2.Trudność: ★★☆
  10. 10.10Mediana dwóch posortowanych listWczytaj dwie listy liczb całkowitych. Obie są posortowane niemalejąco i mają tę samą długość n ≥ 1.Trudność: ★★☆
  11. 10.11Operacje na zbiorachWczytaj dwie listy liczb całkowitych i zamień każdą z nich na zbiór: A (z listy 1) i B (z listy 2).Trudność: ★☆☆
  12. 10.12Sprawdzanie testu (zip, enumerate)Uczeń rozwiązał test wyboru.Trudność: ★☆☆
  13. 10.13Poprawność numeru PESELNumer PESEL składa się z 11 cyfr c_1 c_2 … c_11. Ostatnia cyfra c_11 jest cyfrą kontrolną.Trudność: ★★☆

Rozdział 11: Napisy — wprowadzenie

Teoria: Napisy, Formatowanie f-string

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale ćwiczą podstawowe operacje na napisach: indeksowanie, wycinanie, zamianę znaków, dzielenie zdania na słowa i składanie napisów z części.

Konwencje wspólne:

  • Każde zadanie jest osobnym programem: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Program nie wypisuje komunikatów typu „Podaj napis:”.
  • Napis lub zdanie wczytuj jako całą linię — może zawierać spacje.
  • Słowo to fragment zdania oddzielony od innych spacjami. Znaki interpunkcyjne (np. . , ! ? ; : - ( ) ") stojące na początku lub końcu fragmentu nie należą do słowa (kota. → kota), a fragment złożony wyłącznie z interpunkcji (np. samotny myślnik -) nie jest słowem. W Pythonie słowa uzyskasz tak: podziel zdanie metodą split(), z każdego fragmentu usuń interpunkcję metodą strip(string.punctuation) i pomiń puste wyniki.
  • Gdy wynikiem jest lista, wypisz ją tak, jak robi to print(lista) w Pythonie, np. ['Ala', 'ma', 'kota']. Pusta lista to [].
  1. 11.1Odwróć napisWczytaj napis i wypisz go od tyłu — znak po znaku, od ostatniego do pierwszego.Trudność: ★☆☆
  2. 11.2Policz wystąpienia znakuWczytaj napis oraz jeden znak. Wypisz, ile razy ten znak występuje w napisie.Trudność: ★☆☆
  3. 11.3Z ilu słów składa się zdanie?Wczytaj zdanie i policz, z ilu słów się składa. Słowa wyznaczaj zgodnie z konwencją rozdziału.Trudność: ★☆☆
  4. 11.4Zamień wszystkie małe litery na dużeWczytaj napis i zamień w nim wszystkie małe litery (także polskie, np. ż → Ż) na wielkie.Trudność: ★☆☆
  5. 11.5Co k-ty znak poziomo i pionowoWczytaj napis i liczbę k. Wybierz co k-ty znak napisu, czyli znaki na pozycjach k, 2k, 3k, … (pozycje liczymy od 1).Trudność: ★☆☆
  6. 11.6Zamień litery „a” na „?”Wczytaj napis i zamień w nim wszystkie małe litery a na znak ?. Wielkie A pozostaw bez zmian.Trudność: ★☆☆
  7. 11.7Zamień znaki na kody ASCIIWczytaj napis i wypisz kody ASCII wszystkich jego znaków (także spacji), w kolejności występowania.Trudność: ★☆☆
  8. 11.8Wypisz pionowo słowa ze zdaniaWczytaj zdanie, podziel je na słowa (zgodnie z konwencją rozdziału — bez interpunkcji) i wypisz każde słowo w osobnej…Trudność: ★☆☆
  9. 11.9Rozdziel informacje o pracownikuWczytaj linię z danymi pracownika.Trudność: ★☆☆
  10. 11.10Najdłuższe i najkrótsze słowoWczytaj zdanie i znajdź w nim (zgodnie z konwencją rozdziału — bez interpunkcji).Trudność: ★☆☆
  11. 11.11Średnia długość słówWczytaj zdanie i oblicz średnią długość jego słów (zgodnie z konwencją rozdziału — interpunkcja nie wlicza się do…Trudność: ★☆☆
  12. 11.12Usuń spacje ze zdaniaWczytaj zdanie i usuń z niego wszystkie spacje. Pozostałe znaki (także interpunkcję) pozostaw bez zmian.Trudność: ★☆☆
  13. 11.13Znaki na indeksach będących liczbami pierwszymiWczytaj napis i zbierz do listy znaki, których indeksy (liczone od 0) są liczbami pierwszymi.Trudność: ★☆☆
  14. 11.14Napis z liczb od 1 do nWczytaj liczbę n i zbuduj napis złożony z kolejnych liczb od 1 do n zapisanych jedna za drugą, bez separatorów.Trudność: ★☆☆
  15. 11.15Odległość HammingaWczytaj dwa napisy tej samej długości i policz, na ilu pozycjach mają różne znaki (tzw.Trudność: ★★☆
  16. 11.16Konwersja listy na napisNapisz funkcję lista_na_napis(liczby), która otrzymuje listę liczb naturalnych i zwraca napis powstały przez zapisanie…Trudność: ★☆☆
  17. 11.17Odwróć słowa w zdaniuWczytaj zdanie i odwróć kolejność liter w każdym słowie osobno, zachowując kolejność słów w zdaniu.Trudność: ★★☆
  18. 11.18Szyfr CezaraSzyfr Cezara zastępuje każdą literę literą położoną k miejsc dalej w alfabecie.Trudność: ★★☆
  19. 11.19Numerowanie wierszy do końca danychWczytuj wiersze tekstu aż do końca danych wejściowych — nie wiadomo z góry, ile ich będzie.Trudność: ★☆☆

Rozdział 12: Napisy — anagramy i palindromy

Teoria: Napisy

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale dotyczą palindromów (napisów czytanych tak samo od przodu i od tyłu), anagramów (napisów złożonych z tych samych liter w innej kolejności) oraz permutacji liter słowa.

Konwencje wspólne:

  • Każde zadanie jest osobnym programem: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Program nie wypisuje komunikatów typu „Podaj słowo:”.
  • Napis wczytuj jako całą linię. Spacje mogą w nim wystąpić tylko tam, gdzie treść mówi o zdaniu.
  • Słowo w zdaniu to fragment oddzielony od innych spacjami. Znaki interpunkcyjne (np. . , ! ? ; : -) stojące na początku lub końcu fragmentu nie należą do słowa (kara. → kara), a fragment złożony wyłącznie z interpunkcji nie jest słowem. W Pythonie: fragment.strip(string.punctuation) dla każdego fragmentu z zdanie.split().
  • Gdy zadanie każe ignorować wielkość liter, porównuj napisy np. po zamianie na małe litery (lower()), ale słowa wypisuj w postaci z wejścia (bez interpunkcji z brzegów).
  • Gdy wynikiem jest kilka napisów, wypisz każdy w osobnej linii. Jeśli nie ma żadnego — program nic nie wypisuje.
  1. 12.1Czy słowo jest palindromem?Wczytaj jedno słowo i sprawdź, czy jest palindromem, czyli czy czytane od lewej do prawej i od prawej do lewej jest…Trudność: ★☆☆
  2. 12.2Wszystkie permutacje słowaWczytaj słowo złożone z niepowtarzających się liter i wypisz wszystkie jego permutacje (wszystkie słowa, które można…Trudność: ★★☆
  3. 12.3Czy dwa słowa są anagramami?Wczytaj dwa słowa i sprawdź, czy są anagramami, czyli czy jedno da się utworzyć przez przestawienie liter drugiego…Trudność: ★☆☆
  4. 12.4Palindromy w zdaniuWczytaj zdanie i wypisz wszystkie jego słowa, które są palindromami. Przy sprawdzaniu ignoruj wielkość liter.Trudność: ★★☆
  5. 12.5Anagramy słowa w zdaniuWczytaj zdanie oraz słowo-klucz k. Wypisz wszystkie słowa zdania, które są anagramami słowa k (także samo słowo k).Trudność: ★★☆
  6. 12.6Permutacje słowa, które są palindromamiWczytaj słowo i wypisz wszystkie różne palindromy, które można ułożyć z jego liter (używając każdej litery dokładnie…Trudność: ★★☆
  7. 12.7Minimalna liczba usunięć, aby uzyskać anagramyWczytaj dwa słowa (mogą mieć różne długości).Trudność: ★★☆
  8. 12.8Wyjątkowe palindromy (podciągi bez zmiany kolejności)Wczytaj słowo i znajdź wszystkie różne wyjątkowe palindromy, które są jego spójnymi fragmentami (podnapisami, czyli…Trudność: ★★★

Rozdział 13: Macierze i przedziały

Teoria: Listy dwuwymiarowe (macierze), Referencje i kopiowanie

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale ćwiczą pracę z listami dwuwymiarowymi (macierzami): tworzenie, wczytywanie, przechodzenie po wierszach i kolumnach oraz przekształcanie.
Każde zadanie (oraz każdy podpunkt) jest osobnym, niezależnym programem: czyta standardowe wejście (stdin) i wypisuje wynik na standardowe wyjście (stdout).

Konwencje wspólne:

  • Dane wczytuj dokładnie w kolejności podanej w sekcji Wejście.
  • Wiersz macierzy na wejściu to jedna linia z liczbami oddzielonymi spacjami — wczytaj całą linię i rozbij ją po spacjach (input().split()).
  • W wyjściu macierzy: każdy wiersz w osobnej linii, elementy oddzielone pojedynczą spacją.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.
  1. 13.1Macierz z identycznymi wierszami 0..bWczytaj liczby a i b.Trudność: ★☆☆
  2. 13.2Macierz n×n: iloczyn indeksówWczytaj n. Utwórz macierz n×n, w której element w wierszu i i kolumnie j (indeksy od 0) ma wartość i · j, i wypisz ją.Trudność: ★☆☆
  3. 13.3Macierz 2-kolumnowa z dwóch listWczytaj dwie listy liczb całkowitych.Trudność: ★☆☆
  4. 13.4Dodawanie i odejmowanie macierzyWczytaj dwie macierze A i B o wymiarach n×m. a) Wypisz ich sumę A + B.Trudność: ★☆☆
  5. 13.5Czy macierz jest magiczna?Wczytaj macierz kwadratową n×n z dodatnimi liczbami całkowitymi.Trudność: ★★☆
  6. 13.6Scalanie przedziałówWczytaj n przedziałów domkniętych [a_i, b_i].Trudność: ★★☆
  7. 13.7Zerowanie macierzyWczytaj macierz n×m. Dla każdego zera w wejściowej macierzy wyzeruj cały jego wiersz i całą jego kolumnę.Trudność: ★★☆
  8. 13.8Wypisanie elementów macierzy spiralnieWczytaj macierz n×m i wypisz jej elementy spiralnie, zgodnie z ruchem wskazówek zegara.Trudność: ★★☆
  9. 13.9Klepsydra o największej sumieWczytaj macierz n×m. Klepsydra to 7 pól wyciętych z dowolnego kwadratu 3×3 macierzy.Trudność: ★★☆
  10. 13.10Obróć macierz o 90° w prawoWczytaj kwadratową macierz n×n i wypisz ją po obrocie o 90° zgodnie z ruchem wskazówek zegara.Trudność: ★★☆
  11. 13.11Gra w statkiWczytaj planszę 10×10 do gry w statki, a potem kolejne strzały gracza i rozstrzygnij każdy z nich.Trudność: ★★★
  12. 13.12Transpozycja i mnożenie macierzyWczytaj macierz A o wymiarach n×m i macierz B o wymiarach r×p. a) Wypisz macierz transponowaną A^T o wymiarach m×n.Trudność: ★★☆
  13. 13.13Gra w życie: k pokoleńGra w życie Conwaya to plansza komórek, z których każda jest żywa (#) albo martwa (.).Trudność: ★★☆
  14. 13.14Znajdź błąd: wspólne wierszeProgram z sekcji Kod startowy miał tworzyć planszę n×m wypełnioną zerami, a następnie wpisywać 1 w k pól podanych na…Trudność: ★★☆

Rozdział 14: Funkcje — wielomiany

Teoria: Funkcje, Czyste funkcje i skutki uboczne

Wprowadzenie i zasady rozdziału

Poniższe zadania dotyczą pisania funkcji operujących na wielomianach. Wielomian zapisujemy jako listę jego współczynników od najwyższej potęgi do wyrazu wolnego: lista [a_n, a_{n-1}, ..., a_1, a_0] oznacza wielomian $a_n x^n + a_{n-1} x^{n-1} + \dots + a_1 x + a_0$.

Konwencje wspólne:

  • Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście. Główną pracę wykonuje funkcja opisana w treści zadania — program tylko wczytuje dane, wywołuje funkcję i wypisuje wynik (gotowy szkielet znajdziesz w sekcji „Kod startowy”).
  • Wielomian stopnia n jest podawany w dwóch liniach: najpierw liczba n, a w następnej linii n+1 liczb całkowitych a_n a_{n-1} ... a_0 oddzielonych spacjami.
  • Współczynniki są liczbami całkowitymi (mogą być ujemne). Dla n ≥ 1 współczynnik a_n jest różny od zera.
  • Gdy wynikiem jest wielomian, wypisz jego współczynniki od najwyższej potęgi w jednej linii, oddzielone pojedynczą spacją, bez nawiasów i przecinków.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.
  1. 14.1Wartość wielomianu w punkcieNapisz funkcję wartosc_wielomianu(wspolczynniki, x), która otrzymuje listę współczynników wielomianu W(x) = a_n x^n +…Trudność: ★☆☆
  2. 14.2Iloczyn wielomianu przez skalarNapisz funkcję pomnoz_przez_skalar(wspolczynniki, k), która zwraca nową listę współczynników wielomianu k · W(x)…Trudność: ★☆☆
  3. 14.3Suma wielomianówNapisz funkcję suma_wielomianow(a, b), która otrzymuje listy współczynników dwóch wielomianów (mogą mieć różne…Trudność: ★☆☆
  4. 14.4Mnożenie wielomianówNapisz funkcję iloczyn_wielomianow(a, b), która otrzymuje listy współczynników dwóch wielomianów i zwraca listę…Trudność: ★★☆
  5. 14.5k-ta pochodna wielomianuNapisz funkcję pochodna(wspolczynniki, k), która zwraca listę współczynników wielomianu będącego k-tą pochodną danego…Trudność: ★★☆
  6. 14.6Miejsca zerowe równania kwadratowego (rzeczywiste)Napisz funkcję miejsca_zerowe(a, b, c), która zwraca listę wszystkich rzeczywistych rozwiązań równania ax^2 + bx + c =…Trudność: ★★☆
  7. 14.7Upraszczanie bez skutków ubocznychZapis wielomianu może zaczynać się od zbędnych zer, np.Trudność: ★☆☆

Rozdział 15: Funkcje — rekurencja

Teoria: Funkcje, Rekurencja i programowanie funkcyjne

Wprowadzenie i zasady rozdziału

Poniższe zadania uczą rekurencji: funkcja rozwiązuje problem, wywołując samą siebie dla mniejszych danych, aż dojdzie do przypadku bazowego, w którym odpowiedź jest znana od razu (np. $0! = 1$).

Konwencje wspólne:

  • Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście. Program wczytuje dane, wywołuje funkcję opisaną w treści i wypisuje wynik (gotowy szkielet znajdziesz w sekcji „Kod startowy”).
  • Rozwiązanie musi być rekurencyjne. Właściwe obliczenia wykonuje funkcja, która wywołuje samą siebie. Nie używaj w niej pętli for ani while, ani gotowych narzędzi, które wykonają całą pracę za Ciebie (np. sum(), pow(), operatora **, math.factorial(), list.index()). Sprawdzarka porównuje tylko wynik, ale celem zadań jest ćwiczenie rekurencji.
  • Każda funkcja rekurencyjna potrzebuje przypadku bazowego (kiedy przestajemy się wywoływać) i kroku rekurencyjnego (wywołania dla mniejszego problemu). Bez przypadku bazowego program przerwie działanie błędem RecursionError.
  • Python ogranicza głębokość rekurencji (domyślnie do około 1000 zagnieżdżonych wywołań), dlatego dane w zadaniach są małe.
  • Liczby naturalne liczymy od zera: $0, 1, 2, \dots$
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.
  1. 15.1Liczby naturalne mniejsze od NNapisz rekurencyjną funkcję liczby_mniejsze(n), która zwraca napis złożony ze wszystkich liczb naturalnych mniejszych…Trudność: ★☆☆
  2. 15.2Suma liczb naturalnych mniejszych od NNapisz rekurencyjną funkcję suma_mniejszych(n), która zwraca sumę wszystkich liczb naturalnych mniejszych od n, czyli…Trudność: ★☆☆
  3. 15.3PotęgaNapisz rekurencyjną funkcję potega(a, b), która zwraca a^b, korzystając z zależności a^0 = 1 oraz a^b = a · a^b-1 dla…Trudność: ★☆☆
  4. 15.4SilniaNapisz rekurencyjną funkcję silnia(n), która zwraca n! = 1 · 2 · … · n, korzystając z zależności 0!Trudność: ★☆☆
  5. 15.5Liczba FibonacciegoNapisz rekurencyjną funkcję fibonacci(n), która zwraca n-ty wyraz ciągu Fibonacciego, zdefiniowanego następująco.Trudność: ★☆☆
  6. 15.6N-ty wyraz ciągu danego wzorem rekurencyjnymCiąg jest zdefiniowany wzorem rekurencyjnym: a_1 = 1, a_n = 1 + 2 · a_n-1 dla n ≥ 2.Trudność: ★☆☆
  7. 15.7Wyszukiwanie liniowe rekurencyjnieNapisz rekurencyjną funkcję wyszukaj(lista, klucz, indeks=0), która zwraca indeks pierwszego wystąpienia liczby klucz…Trudność: ★★☆
  8. 15.8Wieża HanoiNa słupku A leży N krążków o różnych średnicach: na dole największy, a każdy kolejny jest mniejszy od poprzedniego.Trudność: ★★☆
  9. 15.9Słowa elfickieSłowem elfickim nazywamy napis, w którym każda z liter słowa elf (czyli e, l i f) występuje co najmniej raz, w…Trudność: ★★☆
  10. 15.10GraW grze w każdym ruchu gracz zdobywa 3, 5 albo 10 punktów. Gracz wygrywa, gdy uzbiera dokładnie N punktów.Trudność: ★★☆
  11. 15.11Fibonacci z zapamiętywaniemOblicz F_N — N-ty wyraz ciągu Fibonacciego (F_0 = 0, F_1 = 1, F_n = F_n-1 + F_n-2), ale tym razem dla N aż do 90.Trudność: ★★☆
  12. 15.12Szybkie potęgowanie moduloOblicz a^b m, czyli resztę z dzielenia a^b przez m, dla wykładnika b nawet rzędu 10^18.Trudność: ★★☆
  13. 15.13Ciągi binarne bez sąsiednich jedynekCiąg binarny to napis złożony ze znaków 0 i 1.Trudność: ★★☆

Rozdział 16: Bity i systemy liczbowe

Teoria: Zmienne i konwersja typów

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale ćwiczą zamianę liczb między systemami liczbowymi oraz operatory bitowe: & (AND), | (OR), ^ (XOR), ~ (NOT) i przesunięcia <<, >>.
Każde zadanie (oraz każdy podpunkt w zadaniach wieloczęściowych) jest osobnym, niezależnym programem: czyta standardowe wejście (stdin) i wypisuje wynik na standardowe wyjście (stdout).

Konwencje wspólne:

  • Każda liczba na wejściu jest w osobnej linii, w kolejności podanej w sekcji Wejście.
  • Liczby na wejściu są nieujemne (0 jest dozwolone), chyba że zadanie wprost mówi inaczej.
  • Zapis binarny wypisuj jako ciąg znaków 0 i 1 **bez spacji, bez prefiksu 0b i bez zer wiodących**; zapis binarny liczby 0 to 0.
  • Dla systemów o podstawie większej niż 10 używaj cyfr 0–9 oraz wielkich liter A–Z.
  • Jeśli zadanie mówi „nie wypisuj nic” — program nie wypisuje nawet pustej linii.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.
  1. 16.1Dziesiętny → binarnyWczytaj liczbę naturalną n zapisaną w systemie dziesiętnym i wypisz jej zapis w systemie binarnym.Trudność: ★☆☆
  2. 16.2Binarny → dziesiętnyWczytaj liczbę naturalną zapisaną w systemie binarnym (ciąg znaków 0 i 1) i wypisz jej wartość w systemie dziesiętnym.Trudność: ★☆☆
  3. 16.3Dodawanie bitoweWczytaj dwie liczby naturalne a i b. Oblicz a + b, używając wyłącznie operatorów bitowych i przesunięć.Trudność: ★★☆
  4. 16.4Odejmowanie bitoweWczytaj dwie liczby naturalne a i b. Oblicz a - b, używając wyłącznie operatorów bitowych i przesunięć.Trudność: ★★☆
  5. 16.5Mnożenie bitoweWczytaj dwie liczby naturalne a i b.Trudność: ★★☆
  6. 16.6Dzielenie całkowite bitoweWczytaj dwie liczby naturalne a i b.Trudność: ★★★
  7. 16.7Liczba zer w zapisie binarnymWczytaj liczbę naturalną n. Policz, ile cyfr 0 ma jej zapis binarny (bez zer wiodących).Trudność: ★☆☆
  8. 16.8Liczba jedynek w zapisie binarnymWczytaj liczbę naturalną n. Policz, ile bitów równych 1 ma jej zapis binarny.Trudność: ★☆☆
  9. 16.9Minimum bez instrukcji warunkowychWczytaj dwie liczby całkowite a i b.Trudność: ★★☆
  10. 16.10Konwersja między dowolnymi systemami (2..36)Wczytaj zapis liczby naturalnej X w systemie o podstawie p oraz podstawę docelową q.Trudność: ★★☆
  11. 16.11Zamiana sąsiadujących bitówWczytaj liczbę naturalną n.Trudność: ★☆☆
  12. 16.12Najbliższa potęga dwójki (>= n)Wczytaj liczbę naturalną n.Trudność: ★☆☆
  13. 16.13Wielkie → małe (bitowo)Wczytaj napis.Trudność: ★★☆
  14. 16.14Odwróć wielkość liter (bitowo)Wczytaj napis.Trudność: ★★☆
  15. 16.15Ile bitów trzeba odwrócić (A → B)Wczytaj dwie liczby naturalne A i B.Trudność: ★★☆
  16. 16.16Palindrom w systemie binarnymWczytaj liczbę naturalną n.Trudność: ★★☆
  17. 16.17Najdłuższy ciąg zer otoczony jedynkamiWczytaj liczbę naturalną n.Trudność: ★★★

Rozdział 17: Słowniki

Teoria: Słowniki, Krotki

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale ćwiczą pracę ze słownikami (dict): tworzenie, dodawanie i usuwanie par, zliczanie wystąpień oraz grupowanie danych według klucza.
Każde zadanie (oraz każdy podpunkt) jest osobnym, niezależnym programem: czyta standardowe wejście (stdin) i wypisuje wynik na standardowe wyjście (stdout).

Konwencje wspólne:

  • Dane wczytuj dokładnie w kolejności podanej w sekcji Wejście; jeśli w jednej linii jest kilka wartości — rozbij ją po spacjach.
  • Jeśli wynikiem jest słownik, wypisz go tak, jak robi to print(slownik) w Pythonie: {klucz: wartość, klucz: wartość} — pary oddzielone przecinkiem i spacją, po dwukropku spacja, klucze i wartości napisowe w apostrofach (np. {'ala': 2, 'ma': 1}), liczby bez apostrofów (np. {1: 1, 2: 4}), pusty słownik to {}.
  • Kolejność par w wypisanym słowniku to kolejność, w jakiej klucze były do niego dodawane (tak zachowuje się słownik w Pythonie).
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.
  1. 17.1Słownik: liczby i ich kwadratyWczytaj liczbę n. Utwórz słownik, w którym kluczami są liczby od 1 do n - 1, a wartościami ich kwadraty, i wypisz go.Trudność: ★☆☆
  2. 17.2Słownik z dwóch list (klucze i wartości)Wczytaj dwie listy liczb całkowitych.Trudność: ★☆☆
  3. 17.3Biblioteka: baza wypożyczeńProwadź bazę wypożyczeń biblioteki jako słownik imię → lista wypożyczonych tytułów.Trudność: ★☆☆
  4. 17.4Usuń pary ze słownika na podstawie wartościWczytaj słownik złożony z n par (klucz — słowo, wartość — liczba całkowita) oraz liczbę k.Trudność: ★☆☆
  5. 17.5Pracownik z największym sumarycznym zyskiemWczytaj n wpisów postaci pracownik zysk. Ten sam pracownik może mieć wiele wpisów.Trudność: ★☆☆
  6. 17.6Histogram znaków w słowieWczytaj napis. Utwórz słownik, w którym kluczami są znaki napisu, a wartościami liczby ich wystąpień, i wypisz go.Trudność: ★☆☆
  7. 17.7Histogram słów w tekście (ignoruj wielkość liter)Wczytaj tekst. Policz, ile razy występuje w nim każde słowo, nie rozróżniając wielkości liter.Trudność: ★☆☆
  8. 17.8Najczęstsza litera w zdaniuWczytaj zdanie.Trudność: ★☆☆
  9. 17.9Znaki występujące co najmniej dwa razyWczytaj napis.Trudność: ★☆☆
  10. 17.10Znalezienie anagramów w tekście (grupy)Wczytaj tekst.Trudność: ★★☆
  11. 17.11Sortowanie „słownika” po kluczach i po wartościachWczytaj n par klucz wartość do słownika. a) Wypisz pary posortowane rosnąco według kluczy.Trudność: ★☆☆
  12. 17.12Porównanie dwóch słowników z listami (kolejność list bez znaczenia)Wczytaj dwa słowniki, w których kluczami są słowa, a wartościami listy liczb całkowitych.Trudność: ★★☆
  13. 17.13Odwrócenie słownikaWczytaj n par osoba miasto — słownik, który każdej osobie przypisuje miasto, w którym mieszka.Trudność: ★☆☆
  14. 17.14Para o danej sumie — szybkoWczytaj listę n liczb całkowitych oraz liczbę x. Znajdź indeksy i, j (gdzie i < j) takie, że lista[i] + lista[j] == x.Trudność: ★★☆
  15. 17.15Robot na siatceRobot stoi na polu (0, 0) nieskończonej kratkowanej płaszczyzny i wykonuje ciąg ruchów.Trudność: ★★☆

Rozdział 18: Klasy

Teoria: Klasy i obiekty, Klasy danych (dataclass), Zgłaszanie wyjątków (raise), Generatory (yield)

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale uczą projektowania klas: konstruktora __init__, atrybutów, metod, metod statycznych (@staticmethod) oraz metod specjalnych, dzięki którym obiekty można wypisywać (__str__), porównywać (__eq__) i łączyć operatorami (__add__, __sub__, __mul__, …). Ostatnie zadania wprowadzają też wyjątki (raise, try/except), klasy danych (@dataclass) i generatory (yield).

Konwencje wspólne:

  • Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • W każdym zadaniu dostajesz kod startowy ze szkieletem klasy, a zwykle także z gotowym wczytywaniem danych i wypisywaniem wyników. Twoim zadaniem jest przede wszystkim uzupełnienie metod klasy — wynik programu zależy od tego, jak działa Twoja klasa.
  • Nazwy klas i metod podane w treści są obowiązkowe (kod startowy z nich korzysta). Nazwy w kodzie piszemy bez polskich znaków, np. Kolo, Prostokat.
  • „Z dokładnością do 2 miejsc po przecinku” oznacza dokładnie dwie cyfry po kropce, np. f"{x:.2f}" (3.00, -0.50).
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.
  1. 18.1Klasa KołoZaprojektuj klasę Kolo opisującą koło: Konstruktor __init__(self, r=1) zapamiętuje promień r (domyślnie 1).Trudność: ★☆☆
  2. 18.2Klasa PunktZaprojektuj klasę Punkt opisującą punkt na płaszczyźnie: Konstruktor __init__(self, x=0, y=0) zapamiętuje współrzędne.Trudność: ★★☆
  3. 18.3Pole nałożenia się dwóch prostokątówZaprojektuj klasę Prostokat opisującą prostokąt o bokach równoległych do osi układu współrzędnych.Trudność: ★★☆
  4. 18.4Klasy Wektor2D i Wektor3DZaprojektuj klasy Wektor2D (wektor na płaszczyźnie) i Wektor3D (wektor w przestrzeni).Trudność: ★★☆
  5. 18.5Klasa MacierzZaprojektuj klasę Macierz: Konstruktor __init__(self, wiersze) przyjmuje listę wierszy (listę list liczb).Trudność: ★★☆
  6. 18.6Klasa LiczbaZespolonaZaprojektuj klasę LiczbaZespolona opisującą liczbę zespoloną a + bi.Trudność: ★★☆
  7. 18.7Zliczanie instancji klasyZaprojektuj klasę MojaKlasa, która sama zlicza, ile jej obiektów (instancji) utworzono.Trudność: ★☆☆
  8. 18.8Konto bankoweZaprojektuj klasę KontoBankowe.Trudność: ★★☆
  9. 18.9Klasa UłamekZaprojektuj klasę Ulamek opisującą ułamek zwykły a/b.Trudność: ★★☆
  10. 18.10Koszyk zakupów (dataclass)Zaprojektuj dwie klasy danych (@dataclass): Produkt z polami nazwa: str, cena.Trudność: ★★☆
  11. 18.11Własny zakres iterowalnyZaprojektuj klasę Zakres — własny odpowiednik wbudowanej funkcji range() — po której obiektach można iterować pętlą for.Trudność: ★★★

Rozdział 19: Dziedziczenie

Teoria: Dziedziczenie i kompozycja, Własne klasy wyjątków

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale uczą dziedziczenia: klasa potomna przejmuje atrybuty i metody klasy bazowej, może je nadpisać (override) albo rozszerzyć, wywołując wersję z klasy bazowej przez super(). Dzięki polimorfizmowi ten sam kod (np. pętla po liście obiektów) wywołuje metodę odpowiednią dla konkretnej klasy obiektu. Dziedziczenie przydaje się też przy wyjątkach: własne wyjątki to klasy dziedziczące po Exception, które można układać w hierarchie.

Konwencje wspólne:

  • Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • W każdym zadaniu dostajesz kod startowy ze szkieletami klas i gotowym wczytywaniem danych. Twoim zadaniem jest uzupełnienie klas — wynik programu zależy od tego, jak działają Twoje klasy.
  • Nazwy klas i metod podane w treści są obowiązkowe (kod startowy z nich korzysta). Nazwy w kodzie piszemy bez polskich znaków, np. Kolo, Czlowiek.
  • „Z dokładnością do 2 miejsc po przecinku” oznacza dokładnie dwie cyfry po kropce, np. f"{x:.2f}" (3.00, 4.50).
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.
  1. 19.1Wywołanie metody klasy bazowej w klasie potomnejZaprojektuj dwie klasy.Trudność: ★☆☆
  2. 19.2Klasa Kształt oraz klasy Koło i KwadratZaprojektuj hierarchię klas: Ksztalt — klasa bazowa dla wszystkich kształtów.Trudność: ★★☆
  3. 19.3Polimorfizm: Zwierz, Pies i KotZaprojektuj klasy: Zwierz — konstruktor __init__(self, imie) zapamiętuje imię zwierzęcia.Trudność: ★★☆
  4. 19.4Dziedziczenie wielopoziomowe: Człowiek → Student → StudentFizykiZaprojektuj hierarchię klas: Czlowiek — atrybuty: imię, nazwisko, miejsce urodzenia, zawód.Trudność: ★★☆
  5. 19.5Dziedziczenie wielokrotne: PtakZaprojektuj klasy: Zwierz — konstruktor __init__(self, imie) zapamiętuje imię.Trudność: ★★☆
  6. 19.6Wypłaty pracownikówZaprojektuj hierarchię klas pracowników: Pracownik — klasa bazowa. Konstruktor __init__(self, imie) zapamiętuje imię.Trudność: ★★☆
  7. 19.7Hierarchia własnych wyjątkówZdefiniuj własne wyjątki tworzące hierarchię.Trudność: ★★☆

Rozdział 20: Operacje na plikach

Teoria: Praca z plikami i folderami, Moduł json, Wyjątki: try / except

Wprowadzenie i zasady rozdziału

Poniższe zadania polegają na wczytywaniu danych ze standardowego wejścia (stdin), wykonywaniu operacji na plikach i folderach oraz wypisywaniu wyniku na standardowe wyjście (stdout).
Każde zadanie jest osobnym, niezależnym programem.

Konwencje wspólne:

  • Program działa na plikach w katalogu roboczym, czyli w folderze, w którym jest uruchamiany. Wszystkie ścieżki na wejściu są względne wobec katalogu roboczego i używają / jako separatora, np. dane/raport.txt. Ścieżki wczytuj jako całe linie — mogą zawierać spacje.
  • Sprawdzarka przed każdym testem tworzy nowy katalog roboczy z plikami opisanymi w teście, uruchamia program, a potem sprawdza zarówno wypisany tekst, jak i zawartość plików.
  • W przykładach Pliki przed: pokazuje zawartość katalogu roboczego przed uruchomieniem programu, a Pliki po: — stan wybranych plików po jego zakończeniu. Każda linia to ścieżka pliku, a linie zaczynające się od | to kolejne wiersze jego treści. Ścieżka zakończona / to pusty folder, (rozmiar: N B) oznacza plik o rozmiarze N bajtów, a (usunięty) — plik, którego po zakończeniu programu ma już nie być.
  • Pliki tekstowe są zapisane w kodowaniu UTF-8 — otwieraj je przez open(sciezka, encoding="utf-8").
  • Rozszerzenie to końcówka nazwy pliku od ostatniej kropki (razem z nią), np. archiwum.tar.gz ma rozszerzenie .gz. Rozszerzenia porównuj bez względu na wielkość liter (.TXT to też .txt).
  • Listy plików wypisuj po jednym w linii, jako ścieżki względem podanego folderu z separatorem / (np. 2024/raport.txt), posortowane rosnąco tak, jak sortuje napisy funkcja sorted(). Na Windowsie ścieżki mają separator \ — zamień go na / (np. metodą Path.as_posix()).
  • Komunikaty dla przypadków brzegowych wypisuj dokładnie w podanej postaci, np. Folder nie istnieje., Plik nie istnieje., Brak plików.
  • Program nie wypisuje komunikatów typu „Podaj ścieżkę:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.
  1. 20.1Czy ścieżka istnieje?Wczytaj ścieżkę i sprawdź, co się pod nią znajduje w katalogu roboczym. Wypisz.Trudność: ★☆☆
  2. 20.2Pliki o danym rozszerzeniu w folderze (bez podfolderów)Wczytaj ścieżkę folderu i rozszerzenie (np. .txt).Trudność: ★★☆
  3. 20.3Znajdź wszystkie ścieżki plików o danej nazwie (rekurencyjnie)Wczytaj ścieżkę folderu i nazwę pliku (np. raport.txt).Trudność: ★★☆
  4. 20.4Wczytaj i wypisz treść plikuWczytaj ścieżkę pliku tekstowego i wypisz jego treść dokładnie tak, jak jest zapisana w pliku (wiersz po wierszu…Trudność: ★☆☆
  5. 20.5Posortuj adresy IP z plikuWczytaj ścieżkę pliku tekstowego, w którym każdy niepusty wiersz zawiera jeden adres IPv4 — cztery liczby od 0 do 255…Trudność: ★☆☆
  6. 20.6Statystyki pliku tekstowegoWczytaj ścieżkę pliku tekstowego i oblicz.Trudność: ★★☆
  7. 20.7Dodaj wiersz na początku plikuWczytaj ścieżkę pliku tekstowego i wiersz tekstu. Dopisz ten wiersz na początku pliku — jako nowy, pierwszy wiersz.Trudność: ★☆☆
  8. 20.8Modyfikacja plików spełniających warunek (rekurencyjnie)Wczytaj ścieżkę folderu i inicjały (np. A.D.). W tym folderze i wszystkich jego podfolderach.Trudność: ★★☆
  9. 20.9Usuń pliki większe niż 10 kB (rekurencyjnie)Wczytaj ścieżkę folderu.Trudność: ★★☆
  10. 20.10Skopiuj pliki PNG do innego folderu (bez podfolderów)Wczytaj ścieżkę folderu źródłowego i docelowego.Trudność: ★☆☆
  11. 20.11Zamień miejscami treści dwóch plikówWczytaj ścieżki dwóch plików A i B. Zamień ich treści miejscami.Trudność: ★★☆
  12. 20.12Przenieś wszystkie pliki CSV do jednego folderu (rekurencyjnie)Wczytaj ścieżkę folderu źródłowego i docelowego.Trudność: ★★☆
  13. 20.13Raport z pliku CSVWczytaj ścieżkę pliku CSV z ocenami uczniów.Trudność: ★★☆
  14. 20.14Edycja konfiguracji JSONPlik konfiguracyjny w formacie JSON zawiera obiekt (w Pythonie.Trudność: ★★☆
  15. 20.15Liczba wierszy z obsługą błędówWczytaj k ścieżek. Dla każdej z nich wypisz w osobnej linii.Trudność: ★☆☆

Rozdział 21: Sortowanie i wyszukiwanie — algorytmy

Teoria: Listy, Pętle for i while

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale polegają na samodzielnym zaimplementowaniu klasycznych algorytmów sortowania i wyszukiwania. Żeby było widać, że program naprawdę wykonuje dany algorytm, w każdym zadaniu wypisujesz stany pośrednie — listę po kolejnych krokach algorytmu albo kolejno sprawdzane pozycje.

Konwencje wspólne:

  • Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Wejście ma zawsze tę samą postać: w 1. linii liczba elementów $n$, w 2. linii $n$ liczb całkowitych oddzielonych spacjami. Jeśli algorytm potrzebuje dodatkowej wartości (np. szukanego klucza), znajduje się ona w 3. linii.
  • Listę wypisuj w formacie Pythona — dokładnie tak, jak robi to print(lista), np. [1, 2, 4, 6, 27].
  • Sortujemy zawsze rosnąco (niemalejąco — liczby mogą się powtarzać).
  • Zaimplementuj algorytm samodzielnie. Nie używaj sorted(), list.sort(), list.index(), operatora in na liście ani innych gotowych funkcji sortujących i wyszukujących.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.
  1. 21.1Sortowanie bąbelkoweNapisz funkcję sortowanie_babelkowe(lista), która sortuje listę rosnąco (w miejscu) algorytmem sortowania bąbelkowego.Trudność: ★☆☆
  2. 21.2Sortowanie przez wybieranieNapisz funkcję sortowanie_przez_wybieranie(lista), która sortuje listę rosnąco (w miejscu) algorytmem sortowania przez…Trudność: ★★☆
  3. 21.3Sortowanie przez wstawianieNapisz funkcję sortowanie_przez_wstawianie(lista), która sortuje listę rosnąco (w miejscu) algorytmem sortowania przez…Trudność: ★★☆
  4. 21.4Sortowanie przez scalanieNapisz rekurencyjną funkcję sortowanie_przez_scalanie(lista), która zwraca nową, posortowaną rosnąco listę…Trudność: ★★☆
  5. 21.5Sortowanie szybkieNapisz rekurencyjną funkcję sortowanie_szybkie(lista), która zwraca nową, posortowaną rosnąco listę, korzystając z…Trudność: ★★☆
  6. 21.6Wyszukiwanie binarneNapisz funkcję wyszukiwanie_binarne(lista, klucz), która w liście posortowanej rosnąco znajduje indeks elementu…Trudność: ★★☆
  7. 21.7Sortowanie przez zliczanieNapisz funkcję sortowanie_przez_zliczanie(lista, k), która sortuje rosnąco listę liczb całkowitych z przedziału [0, k]…Trudność: ★☆☆

Rozdział 22: Sortowanie — praktyka

Teoria: Listy, Lambdy (np. sorted z key=)

Wprowadzenie i zasady rozdziału

Zadania w tym rozdziale pokazują, jak sortować w praktyce: napisy, słowa, pary, obiekty — często według własnego kryterium. Tutaj wolno (a nawet warto) korzystać z wbudowanych narzędzi Pythona: sorted(), list.sort() i parametru key=.

Konwencje wspólne:

  • Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Jeśli wejściem jest napis — wczytaj całą linię (łącznie ze spacjami).
  • Jeśli wejściem jest lista — najpierw podana jest liczba elementów $N$, a potem elementy (w jednej linii albo w kolejnych liniach — zależnie od zadania).
  • Napisy porównujemy tak jak Python, czyli według kodów znaków Unicode: wielkie litery są „mniejsze” od małych ('Z' < 'a'), a polskie litery są „większe” od wszystkich liter alfabetu łacińskiego ('z' < 'ą').
  • Sortowanie w Pythonie (sorted(), list.sort()) jest stabilne: elementy równe według kryterium sortowania zachowują kolejność z wejścia. Korzystają z tego zadania, w których mogą wystąpić remisy.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.
  1. 22.1Sortowanie znaków w napisieWczytaj napis, posortuj rosnąco wszystkie jego znaki i wypisz napis złożony z posortowanych znaków.Trudność: ★☆☆
  2. 22.2Sortowanie słów w zdaniuWczytaj zdanie i podziel je na słowa. Słowa oddzielają od siebie spacje oraz znaki interpunkcyjne.Trudność: ★★☆
  3. 22.3Sortowanie listy par względem kryteriumWczytaj listę par (napis, liczba) i zapisz je jako krotki. a) Posortuj pary rosnąco według liczby.Trudność: ★☆☆
  4. 22.4Sortowanie napisów według długościWczytaj listę napisów i posortuj ją rosnąco według długości napisów.Trudność: ★☆☆
  5. 22.5Sortowanie listy miastKlasa Miasto ma atrybuty: nazwa (napis), liczba_mieszkancow (liczba naturalna).Trudność: ★☆☆
  6. 22.6Sortowanie listy 0/1/2Wczytaj listę składającą się wyłącznie z liczb 0, 1 i 2 i posortuj ją rosnąco.Trudność: ★★☆
  7. 22.7Indeks klucza w cyklicznie posortowanej liścieLista liczb całkowitych była posortowana rosnąco, a następnie została cyklicznie przesunięta (jej początkowy fragment…Trudność: ★★☆
  8. 22.8Ranking zawodnikówWczytaj wyniki zawodów: dla każdego zawodnika jego imię, liczbę zdobytych punktów i czas (w sekundach).Trudność: ★★☆
  9. 22.9k najczęstszych słówWczytaj liczbę k i tekst. Znajdź k słów, które występują w tekście najczęściej.Trudność: ★★☆

Rozdział 23: Wyrażenia regularne

Teoria: Wyrażenia regularne

Wprowadzenie i zasady rozdziału

Poniższe zadania polegają na wczytywaniu danych ze standardowego wejścia (stdin) i wypisywaniu wyniku na standardowe wyjście (stdout). Rozwiązuj je za pomocą wyrażeń regularnych (moduł re).
Każde zadanie jest osobnym, niezależnym programem.

Konwencje wspólne:

  • Każda wartość wejściowa znajduje się w osobnej linii — wczytuj je dokładnie w podanej kolejności.
  • Tekst wielowierszowy jest poprzedzony linią z liczbą jego wierszy n — wczytaj go, wywołując input() n razy.
  • Dla wartości logicznych wypisuj dokładnie Prawda lub Fałsz.
  • Wielkość liter ma znaczenie, chyba że zadanie mówi inaczej.
  • Słowo to najdłuższy ciąg znaków dopasowywanych przez \w, czyli liter (także polskich), cyfr i znaku podkreślenia _. Każdy inny znak — spacja, interpunkcja, myślnik — rozdziela słowa, np. biało-czerwona to dwa słowa: biało i czerwona. Granicę słowa w wyrażeniu regularnym oznacza \b.
  • Program nie wypisuje komunikatów typu „Podaj tekst:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.
  1. 23.1Sprawdź poprawność adresu e-mailWczytaj napis i sprawdź, czy jest poprawnym adresem e-mail według poniższych (uproszczonych) reguł.Trudność: ★★☆
  2. 23.2Sprawdź poprawność hasłaWczytaj hasło i sprawdź, czy spełnia wszystkie warunki.Trudność: ★★☆
  3. 23.3Sprawdź, czy napis składa się wyłącznie z cyfrWczytaj napis i sprawdź, czy składa się wyłącznie z cyfr 0–9.Trudność: ★☆☆
  4. 23.4Sprawdź, czy słowo występuje w zdaniu jako osobne słowoWczytaj zdanie i słowo. Sprawdź, czy słowo występuje w zdaniu jako całe słowo, a nie tylko jako fragment innego słowa.Trudność: ★☆☆
  5. 23.5Wyodrębnij cyfry z tekstuWczytaj tekst i wypisz wszystkie występujące w nim cyfry 0–9 sklejone w jeden napis, w kolejności występowania.Trudność: ★☆☆
  6. 23.6Wiersze kończące się określonym napisemWczytaj tekst wielowierszowy i końcówkę (np. da). Wypisz wszystkie wiersze tekstu, które kończą się podaną końcówką.Trudność: ★☆☆
  7. 23.7Podziel tekst względem znaków interpunkcyjnychWczytaj tekst (jedno lub kilka zdań) i podziel go na fragmenty w miejscach występowania znaków interpunkcyjnych , .Trudność: ★☆☆
  8. 23.8Cyfry w słowachWczytaj zdanie i wypisz wszystkie ciągi cyfr, które są „przyklejone” do liter.Trudność: ★★☆
  9. 23.9Usuń fragment napisu od pierwszego wystąpienia słowa kluczWczytaj tekst wielowierszowy i słowo klucz. Znajdź pierwsze wystąpienie słowa klucz w tekście jako całego słowa (zob.Trudność: ★★☆
  10. 23.10Podmień napisy z listy A na napisy z listy BWczytaj tekst wielowierszowy oraz dwie listy słów tej samej długości: A i B.Trudność: ★★☆
  11. 23.11Nazwa pliku bez rozszerzeniaWczytaj ścieżkę do pliku.Trudność: ★★☆
  12. 23.12Zamiana formatu datWczytaj tekst i zamień w nim każdą datę zapisaną w formacie DD.MM.RRRR na format RRRR-MM-DD, np.Trudność: ★★☆
  13. 23.13Analiza logów serweraSerwer WWW zapisuje każde żądanie w jednym wierszu dziennika (logu), np..Trudność: ★★☆

Rozdział 24: Listy — zadania dodatkowe

Teoria: Listy

Wprowadzenie i zasady rozdziału

Trudniejsze zadania na listach: przekształcenia w miejscu, sumy prefiksowe, kopiec i programowanie dynamiczne. Liczy się nie tylko poprawny wynik, ale też dobry algorytm — w testach są także długie listy, na których rozwiązanie „sprawdzające wszystkie możliwości” nie zdąży się wykonać.

Konwencje wspólne:

  • Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.
  • Lista liczb jest podawana w dwóch liniach: w pierwszej jest liczba elementów n, w drugiej n liczb całkowitych oddzielonych spacjami (o ile zadanie nie mówi inaczej).
  • Listę wynikową wypisuj w jednej linii, a jej elementy oddzielaj pojedynczą spacją (o ile zadanie nie mówi inaczej).
  • Indeksy liczymy od 0.
  1. 24.1Najdłuższy ciąg jedynekOtrzymujesz listę składającą się wyłącznie z zer i jedynek.Trudność: ★★☆
  2. 24.2Przesuń zera na koniec listyOtrzymujesz listę liczb całkowitych.Trudność: ★★☆
  3. 24.3Minimalny iloczyn trzech liczbOtrzymujesz listę liczb całkowitych.Trudność: ★★☆
  4. 24.4Najdłuższy fragment o równych sumachOtrzymujesz dwie listy binarne A i B (zera i jedynki) o tej samej długości n.Trudność: ★★★
  5. 24.5Zbiór potęgowy listyOtrzymujesz listę liczb całkowitych (mogą się powtarzać).Trudność: ★★★
  6. 24.6Połączenie posortowanych list (bez powtórzeń)Otrzymujesz M list liczb całkowitych, z których każda jest posortowana niemalejąco.Trudność: ★★★
  7. 24.7Pojemność wody między słupkamiOtrzymujesz wysokości n słupków stojących obok siebie; każdy słupek ma szerokość 1.Trudność: ★★★
  8. 24.8Maksymalny zysk ze sprzedaży sznurkaMasz sznurek o długości n i cennik: c_d to cena kawałka o długości d (dla d = 1, 2, …, n).Trudność: ★★★
  9. 24.9Najdłuższy naprzemienny podciągCiąg x_1, x_2, …, x_k jest naprzemienny (zygzakowaty), jeśli różnice między kolejnymi elementami są na przemian…Trudność: ★★★
  10. 24.10Maksymalna suma spójnego fragmentu (algorytm Kadane'a)Otrzymujesz listę liczb całkowitych.Trudność: ★★☆

Rozdział 25: Napisy — zadania dodatkowe

Teoria: Napisy

Wprowadzenie i zasady rozdziału

Trudniejsze zadania na napisach: samodzielna zamiana i usuwanie fragmentów, przedrostki, kodowanie RLE, rotacje, szukanie najdłuższych powtórzeń i wspólnych fragmentów (programowanie dynamiczne) oraz sprawdzanie nawiasów za pomocą stosu. Spróbuj rozwiązywać je własnymi pętlami, bez gotowych metod w rodzaju replace czy startswith — właśnie o to w nich chodzi.

Konwencje wspólne:

  • Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Program nie wypisuje komunikatów typu „Podaj napis:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.
  • Każdy napis zajmuje jedną całą linię wejścia, razem ze spacjami — wczytuj go przez input(), bez strip() i split().
  • Wielkość liter ma znaczenie (A i a to różne znaki), a spacja też jest znakiem.
  • Podnapis to ciągły fragment napisu, np. kot jest podnapisem kotlet, a ket — nie.
  • Pozycje znaków (indeksy) liczymy od 0, tak jak w Pythonie.
  • Odpowiedzi logiczne wypisuj jako Prawda albo Fałsz (o ile zadanie nie mówi inaczej).
  1. 25.1Podmiana słowa w zdaniuOtrzymujesz zdanie S oraz dwa napisy A i B. Zamień wszystkie wystąpienia napisu A w zdaniu na napis B.Trudność: ★★☆
  2. 25.2Usuń podnapisOtrzymujesz napis S i napis T. Usuń z S wszystkie wystąpienia podnapisu T.Trudność: ★★☆
  3. 25.3Czy napis A jest początkiem napisu B?Otrzymujesz napisy A i B. Sprawdź, czy B zaczyna się od A, czyli czy A jest przedrostkiem B.Trudność: ★☆☆
  4. 25.4Kodowanie długości serii (RLE)Kodowanie długości serii (ang. run-length encoding, RLE) to prosta metoda kompresji.Trudność: ★★☆
  5. 25.5Rotacje napisówOtrzymujesz dwa napisy A i B.Trudność: ★★☆
  6. 25.6Najdłuższy powtarzający się podnapisOtrzymujesz napis. Znajdź najdłuższy podnapis, który występuje w nim co najmniej dwa razy.Trudność: ★★★
  7. 25.7Najdłuższy wspólny przedrostekOtrzymujesz n napisów.Trudność: ★★★
  8. 25.8Najdłuższy wspólny podnapisOtrzymujesz dwa napisy A i B.Trudność: ★★★
  9. 25.9Poprawność nawiasówOtrzymujesz napis, który oprócz dowolnych innych znaków może zawierać nawiasy trzech rodzajów.Trudność: ★★☆