Kurs Podstaw Pythona
Sciezka dla poczatkujacych: uporzadkowane notatki, praktyczne przyklady i zadania w stylu LeetCode.
Notatki
01. Podstawy
- Instalacja w systemie Windows
- Interaktywna konsola
- Zmienne
- Warunki
- Petle
- Funkcje
- Napisy
- Struktury danych
- Enum
- Liczby losowe
02. Sredniozaawansowane
- Klasy i obiekty
- Referencje i kopiowanie
- Czyste funkcje i skutki uboczne
- Dziedziczenie i kompozycja
- Wyrazenia regularne
- Wyjatki
- Watki
- Procesy
- Asyncio
- Lambdy
- Programowanie funkcyjne
- Klasy danych
- Generatory
- Iteratory
- Dekoratory
- Serializacja
03. Inzynieria oprogramowania
- Moduly i pakiety
- Wersje Pythona
- Pip i Pypi
- Srodowisko wirtualne
- Dbanie o jakosc kodu
- Debugowanie
- Testy jednostkowe
- Dokumentacja
- Pliki wykonywalne i PyInstaller
- Kod bajtowy
04. Python w praktyce
- Argumenty linii polecen
- Praca z plikami i folderami
- Pandas i CSV
- Praca z plikami PDF
- Informacje o systemie operacyjnym
- HTTP i prosty serwer
- API wraz z FastAPI
- Bazy danych z SQLite
- Tkinter
- Logi
05. Prezentacje
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.1Zadania pochodzą z otwartego zbioru Nauka-Programowania na GitHubie — znajdziesz tam też rozwiązania wzorcowe w Pythonie i innych językach.
- 1. Interakcja z konsolą24 zadania
- 2. Instrukcja warunkowa (if / else)10 zadań
- 3. Daty (warunki + kalendarz)9 zadań
- 4. Pętle — wprowadzenie (while / for)10 zadań
- 5. Pętle — cyfry liczby (dzielenie przez 10, modulo)12 zadań
- 6. Funkcje — wprowadzenie17 zadań
- 7. Pętle — algorytmy matematyczne10 zadań
- 8. Pętle — pętle zagnieżdżone9 zadań
- 9. Listy — wprowadzenie21 zadań
- 10. Dwie listy i zbiory13 zadań
- 11. Napisy — wprowadzenie19 zadań
- 12. Napisy — anagramy i palindromy8 zadań
- 13. Macierze i przedziały14 zadań
- 14. Funkcje — wielomiany7 zadań
- 15. Funkcje — rekurencja13 zadań
- 16. Bity i systemy liczbowe17 zadań
- 17. Słowniki15 zadań
- 18. Klasy11 zadań
- 19. Dziedziczenie7 zadań
- 20. Operacje na plikach15 zadań
- 21. Sortowanie i wyszukiwanie — algorytmy7 zadań
- 22. Sortowanie — praktyka9 zadań
- 23. Wyrażenia regularne13 zadań
- 24. Listy — zadania dodatkowe10 zadań
- 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.1Wypisywanie tekstu na ekranNapisz program, który wypisze dokładnie: Witaj, świecie!
- 1.2Zamiana kolejności liczbWczytaj dwie liczby całkowite i wypisz je w odwrotnej kolejności (każdą w osobnej linii).
- 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.
- 1.4Podstawowe operacje arytmetyczneWczytaj dwie liczby naturalne a i b i wypisz kolejno.
- 1.5Funkcja liniowa: y = 3x + 10Wczytaj liczbę rzeczywistą x i oblicz wartość funkcji y = 3x + 10.
- 1.6Funkcja liniowa: y = ax + bWczytaj współczynniki a, b oraz argument x i oblicz wartość funkcji liniowej y = ax + b.
- 1.7Funkcja sześcienna: y = x³ + 2Wczytaj liczbę rzeczywistą x i oblicz y = x^3 + 2.
- 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.
- 1.9Funkcja z trygonometrią, wykładniczą i logarytmemWczytaj liczbę rzeczywistą x (kąt w radianach) i oblicz.
- 1.10Kilogramy → gramyWczytaj masę w kilogramach kg i przelicz ją na gramy: g = kg · 1000.
- 1.11Cale → centymetryWczytaj długość w calach inch i przelicz ją na centymetry: cm = inch · 2.54.
- 1.12Sekundy → pełne godzinyWczytaj liczbę sekund s i wypisz, ile pełnych godzin się w niej mieści (godzina ma 3600 sekund).
- 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.
- 1.14Stopnie → radianyWczytaj kąt w stopniach deg i przelicz go na radiany: rad = (deg · π)/180.
- 1.15Fahrenheit → Celsius i KelvinyWczytaj temperaturę w stopniach Fahrenheita F. Oblicz temperaturę w stopniach Celsjusza oraz w kelwinach.
- 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.
- 1.17Pole prostokątaWczytaj długości boków prostokąta a i b i oblicz jego pole ze wzoru P = a b.
- 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.
- 1.19Objętość kuliWczytaj promień kuli r i oblicz jej objętość ze wzoru V = 4/3π r^3.
- 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.
- 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.
- 1.22Koszt pokrycia podłogi płytkamiDane są.
- 1.23Kalkulator kredytowyWczytaj: roczną stopę procentową R (w procentach), okres spłaty Y (w latach), kwotę kredytu P.
- 1.24Sekundy → format GG:MM:SSWczytaj liczbę sekund s i zapisz ją jako czas w formacie GG:MM:SS.
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ę.
- 2.1Liczba większa od 5Wczytaj jedną liczbę naturalną n. Jeśli n > 5, wypisz n. W przeciwnym razie nie wypisuj nic.
- 2.2Porównanie dwóch liczbWczytaj dwie liczby naturalne a i b. Jeśli są równe, wypisz: Liczby są identyczne.
- 2.3Określanie znaku liczbyWczytaj liczbę całkowitą x i wypisz jeden z komunikatów: dla x < 0: Liczba jest ujemna.
- 2.4Maksimum i minimum z dwóch liczbWczytaj dwie liczby naturalne a i b. Wypisz je w jednej linii w kolejności.
- 2.5Sortowanie trzech liczbWczytaj trzy liczby naturalne a, b, c i wypisz je w kolejności niemalejącej (od najmniejszej do największej).
- 2.6Maksimum z czterech liczbWczytaj cztery liczby naturalne i wypisz największą z nich.
- 2.7Prawa logiki (p, q, r)Wczytaj wartości logiczne p, q i r i sprawdź dla nich osiem praw logiki.
- 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).
- 2.9Ocena z punktówWczytaj liczbę punktów zdobytych na sprawdzianie i wypisz ocenę według progów.
- 2.10Prosty kalkulatorWczytaj liczbę a, operator i liczbę b, a następnie wypisz wynik działania a <operator> b.
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.
- 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).
- 3.2Pełnoletność (18 lat)Wczytaj datę urodzenia oraz datę „dzisiejszą” i sprawdź, czy osoba ma ukończone 18 lat w dniu daty dzisiejszej.
- 3.3Rok przestępnyWczytaj rok y i sprawdź, czy jest przestępny w kalendarzu gregoriańskim.
- 3.4Dzień tygodnia z numeruWczytaj liczbę n. Jeśli n jest w zakresie 1–7, wypisz nazwę dnia tygodnia.
- 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.
- 3.6Sprawdzanie poprawności datyWczytaj d, m, y i sprawdź, czy jest to poprawna data w kalendarzu gregoriańskim.
- 3.7Dzień roku (liczba dni od 1 stycznia, włącznie)Wczytaj datę d, m, y i oblicz numer dnia w roku, tzn.
- 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.
- 3.9Dni między datami (moduł datetime)Wczytaj dwie daty i za pomocą modułu datetime z biblioteki standardowej Pythona oblicz.
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).
- 4.1Warunek kończący pętlęWczytuj kolejne liczby naturalne (każdą z osobnej linii), dopóki nie wczytasz liczby 7.
- 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…
- 4.3Wypisywanie liczby π z rosnącą dokładnościąWczytaj liczbę naturalną n i wypisz liczbę π w n liniach.
- 4.4Sumowanie liczb mniejszych od podanejWczytaj liczbę naturalną n i za pomocą pętli oblicz sumę wszystkich liczb naturalnych dodatnich mniejszych od n, czyli…
- 4.5Liczby z przedziałuWczytaj dwie liczby naturalne a i b. Niech lo będzie mniejszą, a hi większą z nich.
- 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 3k
- 4.7Potęgowanie liczby πWczytaj liczbę naturalną n i oblicz π^n, mnożąc w pętli liczbę π przez siebie.
- 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.
- 4.9Ciąg CollatzaCiąg Collatza zaczyna się od liczby n. Każdy kolejny wyraz powstaje z poprzedniego x według reguły.
- 4.10Walidacja danych wejściowychProgram prosi o liczbę całkowitą z przedziału [1, 100] i nie poddaje się, dopóki jej nie dostanie.
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 % 10in // 10). - Liczba
0ma jedną cyfrę:0. - Jeśli zadanie mówi, że w danym przypadku nic nie trzeba wypisywać, program nie wypisuje nic (nawet pustej linii).
- 5.1Liczenie cyfr w liczbieWczytaj liczbę naturalną n i wypisz, z ilu cyfr składa się jej zapis dziesiętny.
- 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.
- 5.3Sumowanie cyfr liczbyWczytaj liczbę naturalną n, oblicz sumę jej cyfr i wypisz wynik.
- 5.4Cyfry parzysteWczytaj liczbę naturalną n i wypisz od końca wszystkie jej cyfry, które są parzyste.
- 5.5Cyfry mniejsze niż 5Wczytaj liczbę naturalną n i wypisz od końca wszystkie jej cyfry, które są mniejsze niż 5.
- 5.6Cyfry różne od zeraWczytaj liczbę naturalną n i wypisz od końca wszystkie jej cyfry, które są różne od zera.
- 5.7Sprawdzanie, czy liczba jest palindromemWczytaj liczbę naturalną n i sprawdź, czy jest palindromem, czyli czy czytana od końca jest taka sama (np.
- 5.8Liczby mniejsze od n o sumie cyfr równej 10Wczytaj liczbę naturalną n.
- 5.9Trzycyfrowe o sumie cyfr równej nWczytaj liczbę naturalną n.
- 5.10Trzycyfrowe podzielne przez sumę cyfr liczby nWczytaj liczbę naturalną n i oblicz sumę jej cyfr s.
- 5.11Mniejsze od n złożone wyłącznie z parzystych cyfrWczytaj liczbę naturalną n.
- 5.12Algorytm Luhna (numer karty)Numery kart płatniczych mają ostatnią cyfrę kontrolną, dzięki której łatwo wykryć literówkę.
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ę:”.
- 6.1Zwracanie stałej wartości: liczba 3Napisz bezargumentową funkcję zwroc_liczbe(), która zwraca liczbę całkowitą 3.
- 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.
- 6.3Zwracanie stałej wartości: TrueNapisz bezargumentową funkcję zwroc_prawda(), która zwraca wartość logiczną True.
- 6.4Suma dwóch liczbNapisz funkcję suma(a, b), która zwraca sumę a + b dwóch liczb całkowitych.
- 6.5Różnica: b − aNapisz funkcję roznica(a, b), która zwraca różnicę b - a (od drugiej liczby odejmujemy pierwszą).
- 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.
- 6.7Iloraz całkowity: a // bNapisz funkcję iloraz(a, b), która zwraca iloraz całkowity a // b.
- 6.8Reszta z dzielenia: a % bNapisz funkcję reszta(a, b), która zwraca resztę z dzielenia a % b.
- 6.9Sprawdzanie warunków logicznychNapisz funkcję sprawdz_warunki(a, b), która dla dwóch liczb naturalnych zwraca krotkę czterech wartości logicznych…
- 6.10Minimum z dwóch liczbNapisz funkcję min_z_dwoch(a, b), która zwraca mniejszą z dwóch liczb naturalnych.
- 6.11Maksimum z trzech liczbNapisz funkcję max_z_trzech(a, b, c), która zwraca największą z trzech liczb naturalnych.
- 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).
- 6.13Suma cyfr liczby (funkcja)Napisz funkcję suma_cyfr(n), która zwraca sumę cyfr liczby naturalnej n.
- 6.14Weryfikacja nazwy użytkownika i hasłaNapisz dwie funkcje.
- 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.
- 6.16Średnia z dowolnej liczby argumentówNapisz funkcję srednia(liczby), którą można wywołać z dowolną liczbą argumentów — np.
- 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.
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.
- 7.1Średnia, minimum i maksimum z n liczbWczytaj liczbę n, a następnie w pętli n liczb (każdą z osobnej linii).
- 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().
- 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 *).
- 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…
- 7.5Obliczanie silni liczbyNapisz funkcję silnia(n), która zwraca n! = 1 · 2 · … · n obliczone przy użyciu pętli.
- 7.6Największy wspólny dzielnik (NWD)Napisz funkcję nwd(a, b), która zwraca największy wspólny dzielnik liczb a i b.
- 7.7Najmniejsza wspólna wielokrotność (NWW)Napisz funkcję nww(a, b), która zwraca najmniejszą wspólną wielokrotność liczb a i b.
- 7.8Pierwiastek metodą Newtona (Herona)Napisz funkcję pierwiastek(n), która zwraca przybliżenie √(n) obliczone metodą Newtona (Herona), bez użycia…
- 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.
- 7.10Rozkład na czynniki pierwszeNapisz funkcję wypisz_rozklad(n), która wypisuje rozkład liczby n na czynniki pierwsze.
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ć.
- 8.1KwadratWczytaj liczbę naturalną n i wypisz kwadrat o boku n zbudowany z gwiazdek *.
- 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.
- 8.3Trójkąt prostokątny (malejący)Wczytaj liczbę naturalną n i wypisz odwrócony trójkąt o wysokości n.
- 8.4Tabliczka mnożenia N × NWczytaj liczbę naturalną N i wypisz tabliczkę mnożenia o wymiarach N × N.
- 8.5Litera XWczytaj liczbę naturalną n i wypisz literę X o wysokości i szerokości n, zbudowaną z gwiazdek leżących na obu…
- 8.6Litera ZWczytaj liczbę naturalną n i wypisz literę Z o wysokości i szerokości n.
- 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.
- 8.8Trójkąt PascalaWczytaj liczbę naturalną n i wypisz n pierwszych wierszy trójkąta Pascala.
- 8.9N pierwszych liczb pierwszychWczytaj liczbę naturalną N i wypisz N pierwszych liczb pierwszych w jednej linii, w kolejności rosnącej.
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 —nliczb 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ę:”.
- 9.1Wczytaj i wypiszWczytaj listę n liczb całkowitych, a następnie.
- 9.2Wczytaj, zmodyfikuj i wypiszWczytaj listę n liczb całkowitych.
- 9.3Pierwsze wystąpienie kluczaWczytaj listę n liczb całkowitych oraz liczbę klucz. Wypisz indeks pierwszego wystąpienia liczby klucz w liście.
- 9.4Minimum oraz maksimumWczytaj listę n liczb całkowitych. Wypisz największą, a po niej najmniejszą liczbę z listy.
- 9.5Zmodyfikuj elementy spełniające warunekWczytaj listę n liczb całkowitych.
- 9.6Czy średnia elementów znajduje się w liście?Wczytaj listę n liczb całkowitych.
- 9.7Średnia dwóch największych liczbWczytaj listę n liczb naturalnych. Znajdź dwa największe elementy listy i wypisz ich średnią arytmetyczną.
- 9.8Usuń kluczWczytaj listę n liczb całkowitych oraz liczbę klucz.
- 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…
- 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).
- 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.
- 9.12Rotacja w lewo / prawoWczytaj listę n liczb całkowitych, kierunek rotacji oraz liczbę k. Przesuń cyklicznie elementy listy o k pozycji.
- 9.13Brakujący element w ciągu arytmetycznymWczytaj listę n liczb naturalnych.
- 9.14Element bez paryWczytaj listę n liczb całkowitych.
- 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ą.
- 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.
- 9.17Wszystkie pary o sumie x (wartości)Wczytaj listę n liczb całkowitych oraz liczbę x.
- 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…
- 9.19Wycinki listyWczytaj listę n liczb całkowitych oraz liczbę k. Wypisz kolejno.
- 9.20Wyrażenia listoweWczytaj listę n liczb całkowitych i utwórz z niej trzy nowe listy — każdą jednym wyrażeniem listowym.
- 9.21Rzuty kostką z ziarnemZasymuluj n rzutów sześcienną kostką do gry i policz, ile razy wypadła każda liczba oczek.
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żyjfloatzamiastint). - 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=",").
- 10.1Wypisanie elementów dwóch list na przemianWczytaj dwie listy liczb całkowitych i wypisz ich elementy na przemian.
- 10.2Połączenie dwóch listWczytaj dwie listy liczb całkowitych i utwórz z nich dwie nowe listy.
- 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…
- 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…
- 10.5Obliczenie średniej ważonejWczytaj dwie listy liczb zmiennoprzecinkowych tej samej długości.
- 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.
- 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.
- 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.
- 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.
- 10.10Mediana dwóch posortowanych listWczytaj dwie listy liczb całkowitych. Obie są posortowane niemalejąco i mają tę samą długość n ≥ 1.
- 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).
- 10.12Sprawdzanie testu (zip, enumerate)Uczeń rozwiązał test wyboru.
- 10.13Poprawność numeru PESELNumer PESEL składa się z 11 cyfr c_1 c_2 … c_11. Ostatnia cyfra c_11 jest cyfrą kontrolną.
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[].
- 11.1Odwróć napisWczytaj napis i wypisz go od tyłu — znak po znaku, od ostatniego do pierwszego.
- 11.2Policz wystąpienia znakuWczytaj napis oraz jeden znak. Wypisz, ile razy ten znak występuje w napisie.
- 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.
- 11.4Zamień wszystkie małe litery na dużeWczytaj napis i zamień w nim wszystkie małe litery (także polskie, np. ż → Ż) na wielkie.
- 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).
- 11.6Zamień litery „a” na „?”Wczytaj napis i zamień w nim wszystkie małe litery a na znak ?. Wielkie A pozostaw bez zmian.
- 11.7Zamień znaki na kody ASCIIWczytaj napis i wypisz kody ASCII wszystkich jego znaków (także spacji), w kolejności występowania.
- 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…
- 11.9Rozdziel informacje o pracownikuWczytaj linię z danymi pracownika.
- 11.10Najdłuższe i najkrótsze słowoWczytaj zdanie i znajdź w nim (zgodnie z konwencją rozdziału — bez interpunkcji).
- 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…
- 11.12Usuń spacje ze zdaniaWczytaj zdanie i usuń z niego wszystkie spacje. Pozostałe znaki (także interpunkcję) pozostaw bez zmian.
- 11.13Znaki na indeksach będących liczbami pierwszymiWczytaj napis i zbierz do listy znaki, których indeksy (liczone od 0) są liczbami pierwszymi.
- 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.
- 11.15Odległość HammingaWczytaj dwa napisy tej samej długości i policz, na ilu pozycjach mają różne znaki (tzw.
- 11.16Konwersja listy na napisNapisz funkcję lista_na_napis(liczby), która otrzymuje listę liczb naturalnych i zwraca napis powstały przez zapisanie…
- 11.17Odwróć słowa w zdaniuWczytaj zdanie i odwróć kolejność liter w każdym słowie osobno, zachowując kolejność słów w zdaniu.
- 11.18Szyfr CezaraSzyfr Cezara zastępuje każdą literę literą położoną k miejsc dalej w alfabecie.
- 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.
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 zzdanie.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.
- 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…
- 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…
- 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…
- 12.4Palindromy w zdaniuWczytaj zdanie i wypisz wszystkie jego słowa, które są palindromami. Przy sprawdzaniu ignoruj wielkość liter.
- 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).
- 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…
- 12.7Minimalna liczba usunięć, aby uzyskać anagramyWczytaj dwa słowa (mogą mieć różne długości).
- 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…
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ę:”.
- 13.1Macierz z identycznymi wierszami 0..bWczytaj liczby a i b.
- 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ą.
- 13.3Macierz 2-kolumnowa z dwóch listWczytaj dwie listy liczb całkowitych.
- 13.4Dodawanie i odejmowanie macierzyWczytaj dwie macierze A i B o wymiarach n×m. a) Wypisz ich sumę A + B.
- 13.5Czy macierz jest magiczna?Wczytaj macierz kwadratową n×n z dodatnimi liczbami całkowitymi.
- 13.6Scalanie przedziałówWczytaj n przedziałów domkniętych [a_i, b_i].
- 13.7Zerowanie macierzyWczytaj macierz n×m. Dla każdego zera w wejściowej macierzy wyzeruj cały jego wiersz i całą jego kolumnę.
- 13.8Wypisanie elementów macierzy spiralnieWczytaj macierz n×m i wypisz jej elementy spiralnie, zgodnie z ruchem wskazówek zegara.
- 13.9Klepsydra o największej sumieWczytaj macierz n×m. Klepsydra to 7 pól wyciętych z dowolnego kwadratu 3×3 macierzy.
- 13.10Obróć macierz o 90° w prawoWczytaj kwadratową macierz n×n i wypisz ją po obrocie o 90° zgodnie z ruchem wskazówek zegara.
- 13.11Gra w statkiWczytaj planszę 10×10 do gry w statki, a potem kolejne strzały gracza i rozstrzygnij każdy z nich.
- 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.
- 13.13Gra w życie: k pokoleńGra w życie Conwaya to plansza komórek, z których każda jest żywa (#) albo martwa (.).
- 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…
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
njest podawany w dwóch liniach: najpierw liczban, a w następnej liniin+1liczb całkowitycha_n a_{n-1} ... a_0oddzielonych spacjami. - Współczynniki są liczbami całkowitymi (mogą być ujemne). Dla
n ≥ 1współczynnika_njest 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ę:”.
- 14.1Wartość wielomianu w punkcieNapisz funkcję wartosc_wielomianu(wspolczynniki, x), która otrzymuje listę współczynników wielomianu W(x) = a_n x^n +…
- 14.2Iloczyn wielomianu przez skalarNapisz funkcję pomnoz_przez_skalar(wspolczynniki, k), która zwraca nową listę współczynników wielomianu k · W(x)…
- 14.3Suma wielomianówNapisz funkcję suma_wielomianow(a, b), która otrzymuje listy współczynników dwóch wielomianów (mogą mieć różne…
- 14.4Mnożenie wielomianówNapisz funkcję iloczyn_wielomianow(a, b), która otrzymuje listy współczynników dwóch wielomianów i zwraca listę…
- 14.5k-ta pochodna wielomianuNapisz funkcję pochodna(wspolczynniki, k), która zwraca listę współczynników wielomianu będącego k-tą pochodną danego…
- 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 =…
- 14.7Upraszczanie bez skutków ubocznychZapis wielomianu może zaczynać się od zbędnych zer, np.
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
foraniwhile, 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ę:”.
- 15.1Liczby naturalne mniejsze od NNapisz rekurencyjną funkcję liczby_mniejsze(n), która zwraca napis złożony ze wszystkich liczb naturalnych mniejszych…
- 15.2Suma liczb naturalnych mniejszych od NNapisz rekurencyjną funkcję suma_mniejszych(n), która zwraca sumę wszystkich liczb naturalnych mniejszych od n, czyli…
- 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…
- 15.4SilniaNapisz rekurencyjną funkcję silnia(n), która zwraca n! = 1 · 2 · … · n, korzystając z zależności 0!
- 15.5Liczba FibonacciegoNapisz rekurencyjną funkcję fibonacci(n), która zwraca n-ty wyraz ciągu Fibonacciego, zdefiniowanego następująco.
- 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.
- 15.7Wyszukiwanie liniowe rekurencyjnieNapisz rekurencyjną funkcję wyszukaj(lista, klucz, indeks=0), która zwraca indeks pierwszego wystąpienia liczby klucz…
- 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.
- 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…
- 15.10GraW grze w każdym ruchu gracz zdobywa 3, 5 albo 10 punktów. Gracz wygrywa, gdy uzbiera dokładnie N punktów.
- 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.
- 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.
- 15.13Ciągi binarne bez sąsiednich jedynekCiąg binarny to napis złożony ze znaków 0 i 1.
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 (
0jest dozwolone), chyba że zadanie wprost mówi inaczej. - Zapis binarny wypisuj jako ciąg znaków
0i1**bez spacji, bez prefiksu0bi bez zer wiodących**; zapis binarny liczby0to0. - Dla systemów o podstawie większej niż 10 używaj cyfr
0–9oraz wielkich literA–Z. - Jeśli zadanie mówi „nie wypisuj nic” — program nie wypisuje nawet pustej linii.
- Program nie wypisuje komunikatów typu „Podaj liczbę:”.
- 16.1Dziesiętny → binarnyWczytaj liczbę naturalną n zapisaną w systemie dziesiętnym i wypisz jej zapis w systemie binarnym.
- 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.
- 16.3Dodawanie bitoweWczytaj dwie liczby naturalne a i b. Oblicz a + b, używając wyłącznie operatorów bitowych i przesunięć.
- 16.4Odejmowanie bitoweWczytaj dwie liczby naturalne a i b. Oblicz a - b, używając wyłącznie operatorów bitowych i przesunięć.
- 16.5Mnożenie bitoweWczytaj dwie liczby naturalne a i b.
- 16.6Dzielenie całkowite bitoweWczytaj dwie liczby naturalne a i b.
- 16.7Liczba zer w zapisie binarnymWczytaj liczbę naturalną n. Policz, ile cyfr 0 ma jej zapis binarny (bez zer wiodących).
- 16.8Liczba jedynek w zapisie binarnymWczytaj liczbę naturalną n. Policz, ile bitów równych 1 ma jej zapis binarny.
- 16.9Minimum bez instrukcji warunkowychWczytaj dwie liczby całkowite a i b.
- 16.10Konwersja między dowolnymi systemami (2..36)Wczytaj zapis liczby naturalnej X w systemie o podstawie p oraz podstawę docelową q.
- 16.11Zamiana sąsiadujących bitówWczytaj liczbę naturalną n.
- 16.12Najbliższa potęga dwójki (>= n)Wczytaj liczbę naturalną n.
- 16.13Wielkie → małe (bitowo)Wczytaj napis.
- 16.14Odwróć wielkość liter (bitowo)Wczytaj napis.
- 16.15Ile bitów trzeba odwrócić (A → B)Wczytaj dwie liczby naturalne A i B.
- 16.16Palindrom w systemie binarnymWczytaj liczbę naturalną n.
- 16.17Najdłuższy ciąg zer otoczony jedynkamiWczytaj liczbę naturalną n.
Rozdział 17: Słowniki
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ę:”.
- 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.
- 17.2Słownik z dwóch list (klucze i wartości)Wczytaj dwie listy liczb całkowitych.
- 17.3Biblioteka: baza wypożyczeńProwadź bazę wypożyczeń biblioteki jako słownik imię → lista wypożyczonych tytułów.
- 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.
- 17.5Pracownik z największym sumarycznym zyskiemWczytaj n wpisów postaci pracownik zysk. Ten sam pracownik może mieć wiele wpisów.
- 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.
- 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.
- 17.8Najczęstsza litera w zdaniuWczytaj zdanie.
- 17.9Znaki występujące co najmniej dwa razyWczytaj napis.
- 17.10Znalezienie anagramów w tekście (grupy)Wczytaj tekst.
- 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.
- 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.
- 17.13Odwrócenie słownikaWczytaj n par osoba miasto — słownik, który każdej osobie przypisuje miasto, w którym mieszka.
- 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.
- 17.15Robot na siatceRobot stoi na polu (0, 0) nieskończonej kratkowanej płaszczyzny i wykonuje ciąg ruchów.
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ę:”.
- 18.1Klasa KołoZaprojektuj klasę Kolo opisującą koło: Konstruktor __init__(self, r=1) zapamiętuje promień r (domyślnie 1).
- 18.2Klasa PunktZaprojektuj klasę Punkt opisującą punkt na płaszczyźnie: Konstruktor __init__(self, x=0, y=0) zapamiętuje współrzędne.
- 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.
- 18.4Klasy Wektor2D i Wektor3DZaprojektuj klasy Wektor2D (wektor na płaszczyźnie) i Wektor3D (wektor w przestrzeni).
- 18.5Klasa MacierzZaprojektuj klasę Macierz: Konstruktor __init__(self, wiersze) przyjmuje listę wierszy (listę list liczb).
- 18.6Klasa LiczbaZespolonaZaprojektuj klasę LiczbaZespolona opisującą liczbę zespoloną a + bi.
- 18.7Zliczanie instancji klasyZaprojektuj klasę MojaKlasa, która sama zlicza, ile jej obiektów (instancji) utworzono.
- 18.8Konto bankoweZaprojektuj klasę KontoBankowe.
- 18.9Klasa UłamekZaprojektuj klasę Ulamek opisującą ułamek zwykły a/b.
- 18.10Koszyk zakupów (dataclass)Zaprojektuj dwie klasy danych (@dataclass): Produkt z polami nazwa: str, cena.
- 18.11Własny zakres iterowalnyZaprojektuj klasę Zakres — własny odpowiednik wbudowanej funkcji range() — po której obiektach można iterować pętlą for.
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ę:”.
- 19.1Wywołanie metody klasy bazowej w klasie potomnejZaprojektuj dwie klasy.
- 19.2Klasa Kształt oraz klasy Koło i KwadratZaprojektuj hierarchię klas: Ksztalt — klasa bazowa dla wszystkich kształtów.
- 19.3Polimorfizm: Zwierz, Pies i KotZaprojektuj klasy: Zwierz — konstruktor __init__(self, imie) zapamiętuje imię zwierzęcia.
- 19.4Dziedziczenie wielopoziomowe: Człowiek → Student → StudentFizykiZaprojektuj hierarchię klas: Czlowiek — atrybuty: imię, nazwisko, miejsce urodzenia, zawód.
- 19.5Dziedziczenie wielokrotne: PtakZaprojektuj klasy: Zwierz — konstruktor __init__(self, imie) zapamiętuje imię.
- 19.6Wypłaty pracownikówZaprojektuj hierarchię klas pracowników: Pracownik — klasa bazowa. Konstruktor __init__(self, imie) zapamiętuje imię.
- 19.7Hierarchia własnych wyjątkówZdefiniuj własne wyjątki tworzące hierarchię.
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.gzma rozszerzenie.gz. Rozszerzenia porównuj bez względu na wielkość liter (.TXTto 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 funkcjasorted(). 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ę.
- 20.1Czy ścieżka istnieje?Wczytaj ścieżkę i sprawdź, co się pod nią znajduje w katalogu roboczym. Wypisz.
- 20.2Pliki o danym rozszerzeniu w folderze (bez podfolderów)Wczytaj ścieżkę folderu i rozszerzenie (np. .txt).
- 20.3Znajdź wszystkie ścieżki plików o danej nazwie (rekurencyjnie)Wczytaj ścieżkę folderu i nazwę pliku (np. raport.txt).
- 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…
- 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…
- 20.6Statystyki pliku tekstowegoWczytaj ścieżkę pliku tekstowego i oblicz.
- 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.
- 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.
- 20.9Usuń pliki większe niż 10 kB (rekurencyjnie)Wczytaj ścieżkę folderu.
- 20.10Skopiuj pliki PNG do innego folderu (bez podfolderów)Wczytaj ścieżkę folderu źródłowego i docelowego.
- 20.11Zamień miejscami treści dwóch plikówWczytaj ścieżki dwóch plików A i B. Zamień ich treści miejscami.
- 20.12Przenieś wszystkie pliki CSV do jednego folderu (rekurencyjnie)Wczytaj ścieżkę folderu źródłowego i docelowego.
- 20.13Raport z pliku CSVWczytaj ścieżkę pliku CSV z ocenami uczniów.
- 20.14Edycja konfiguracji JSONPlik konfiguracyjny w formacie JSON zawiera obiekt (w Pythonie.
- 20.15Liczba wierszy z obsługą błędówWczytaj k ścieżek. Dla każdej z nich wypisz w osobnej linii.
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(), operatorainna liście ani innych gotowych funkcji sortujących i wyszukujących. - Program nie wypisuje komunikatów typu „Podaj liczbę:”.
- 21.1Sortowanie bąbelkoweNapisz funkcję sortowanie_babelkowe(lista), która sortuje listę rosnąco (w miejscu) algorytmem sortowania bąbelkowego.
- 21.2Sortowanie przez wybieranieNapisz funkcję sortowanie_przez_wybieranie(lista), która sortuje listę rosnąco (w miejscu) algorytmem sortowania przez…
- 21.3Sortowanie przez wstawianieNapisz funkcję sortowanie_przez_wstawianie(lista), która sortuje listę rosnąco (w miejscu) algorytmem sortowania przez…
- 21.4Sortowanie przez scalanieNapisz rekurencyjną funkcję sortowanie_przez_scalanie(lista), która zwraca nową, posortowaną rosnąco listę…
- 21.5Sortowanie szybkieNapisz rekurencyjną funkcję sortowanie_szybkie(lista), która zwraca nową, posortowaną rosnąco listę, korzystając z…
- 21.6Wyszukiwanie binarneNapisz funkcję wyszukiwanie_binarne(lista, klucz), która w liście posortowanej rosnąco znajduje indeks elementu…
- 21.7Sortowanie przez zliczanieNapisz funkcję sortowanie_przez_zliczanie(lista, k), która sortuje rosnąco listę liczb całkowitych z przedziału [0, k]…
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ę:”.
- 22.1Sortowanie znaków w napisieWczytaj napis, posortuj rosnąco wszystkie jego znaki i wypisz napis złożony z posortowanych znaków.
- 22.2Sortowanie słów w zdaniuWczytaj zdanie i podziel je na słowa. Słowa oddzielają od siebie spacje oraz znaki interpunkcyjne.
- 22.3Sortowanie listy par względem kryteriumWczytaj listę par (napis, liczba) i zapisz je jako krotki. a) Posortuj pary rosnąco według liczby.
- 22.4Sortowanie napisów według długościWczytaj listę napisów i posortuj ją rosnąco według długości napisów.
- 22.5Sortowanie listy miastKlasa Miasto ma atrybuty: nazwa (napis), liczba_mieszkancow (liczba naturalna).
- 22.6Sortowanie listy 0/1/2Wczytaj listę składającą się wyłącznie z liczb 0, 1 i 2 i posortuj ją rosnąco.
- 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…
- 22.8Ranking zawodnikówWczytaj wyniki zawodów: dla każdego zawodnika jego imię, liczbę zdobytych punktów i czas (w sekundach).
- 22.9k najczęstszych słówWczytaj liczbę k i tekst. Znajdź k słów, które występują w tekście najczęściej.
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ącinput()nrazy. - Dla wartości logicznych wypisuj dokładnie
PrawdalubFał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-czerwonato dwa słowa:białoiczerwona. 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ę.
- 23.1Sprawdź poprawność adresu e-mailWczytaj napis i sprawdź, czy jest poprawnym adresem e-mail według poniższych (uproszczonych) reguł.
- 23.2Sprawdź poprawność hasłaWczytaj hasło i sprawdź, czy spełnia wszystkie warunki.
- 23.3Sprawdź, czy napis składa się wyłącznie z cyfrWczytaj napis i sprawdź, czy składa się wyłącznie z cyfr 0–9.
- 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.
- 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.
- 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ą.
- 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 , .
- 23.8Cyfry w słowachWczytaj zdanie i wypisz wszystkie ciągi cyfr, które są „przyklejone” do liter.
- 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.
- 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.
- 23.11Nazwa pliku bez rozszerzeniaWczytaj ścieżkę do pliku.
- 23.12Zamiana formatu datWczytaj tekst i zamień w nim każdą datę zapisaną w formacie DD.MM.RRRR na format RRRR-MM-DD, np.
- 23.13Analiza logów serweraSerwer WWW zapisuje każde żądanie w jednym wierszu dziennika (logu), np..
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 drugiejnliczb 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.
- 24.1Najdłuższy ciąg jedynekOtrzymujesz listę składającą się wyłącznie z zer i jedynek.
- 24.2Przesuń zera na koniec listyOtrzymujesz listę liczb całkowitych.
- 24.3Minimalny iloczyn trzech liczbOtrzymujesz listę liczb całkowitych.
- 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.
- 24.5Zbiór potęgowy listyOtrzymujesz listę liczb całkowitych (mogą się powtarzać).
- 24.6Połączenie posortowanych list (bez powtórzeń)Otrzymujesz M list liczb całkowitych, z których każda jest posortowana niemalejąco.
- 24.7Pojemność wody między słupkamiOtrzymujesz wysokości n słupków stojących obok siebie; każdy słupek ma szerokość 1.
- 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).
- 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…
- 24.10Maksymalna suma spójnego fragmentu (algorytm Kadane'a)Otrzymujesz listę liczb całkowitych.
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(), bezstrip()isplit(). - Wielkość liter ma znaczenie (
Aiato różne znaki), a spacja też jest znakiem. - Podnapis to ciągły fragment napisu, np.
kotjest podnapisemkotlet, aket— nie. - Pozycje znaków (indeksy) liczymy od
0, tak jak w Pythonie. - Odpowiedzi logiczne wypisuj jako
PrawdaalboFałsz(o ile zadanie nie mówi inaczej).
- 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.
- 25.2Usuń podnapisOtrzymujesz napis S i napis T. Usuń z S wszystkie wystąpienia podnapisu T.
- 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.
- 25.4Kodowanie długości serii (RLE)Kodowanie długości serii (ang. run-length encoding, RLE) to prosta metoda kompresji.
- 25.5Rotacje napisówOtrzymujesz dwa napisy A i B.
- 25.6Najdłuższy powtarzający się podnapisOtrzymujesz napis. Znajdź najdłuższy podnapis, który występuje w nim co najmniej dwa razy.
- 25.7Najdłuższy wspólny przedrostekOtrzymujesz n napisów.
- 25.8Najdłuższy wspólny podnapisOtrzymujesz dwa napisy A i B.
- 25.9Poprawność nawiasówOtrzymujesz napis, który oprócz dowolnych innych znaków może zawierać nawiasy trzech rodzajów.