Українська
Контрольні завдання
Практичні завдання за темами курсу для перевірки знань. Кожне завдання — окрема програма.
Тема 1. Python, PyCharm і Git
- Створити проєкт Python 3.14 із середовищем venv: із двох додатних чисел у командному рядку обчислити площу прямокутника, вивести результат у м². Відхилити некоректні дані; описати запуск у README та зробити локальний коміт.
- Створити модуль із функцією main та перевіркою
__name__: отримати радіус із командного рядка, вивести площу круга. Продемонструвати, що імпорт модуля не запускає обчислення. - Створити програму, яка показує версію Python, операційну систему, sys.executable та ознаку віртуального середовища. Запустити її базовим Python і Python середовища; пояснити різницю в результатах.
- Створити скрипт, що приймає ім’я та назву групи двома аргументами і виводить привітання. Перевірити кількість аргументів, показати запуск з іменем із двох слів у терміналі та конфігурації PyCharm.
- Створити проєкт venv із пакетом humanize. Отримати цілу додатну кількість секунд як аргумент і вивести її як читабельну тривалість. Зберегти requirements.txt та відтворити запуск у чистому середовищі.
- Створити uv-проєкт із rich. Для трьох додатних довжин у метрах з аргументів вивести таблицю довжин у метрах і сантиметрах. Зберегти pyproject.toml та uv.lock і перевірити
uv sync --locked. - Створити програму, що читає дату YYYY-MM-DD з аргументу і показує дату через сім днів. Описати запуск у README, виключити середовище й кеші з Git та зробити два змістовні коміти.
- Створити локальний Git-репозиторій програми перетворення Цельсія у Фаренгейти. Вхід – число з аргументу, вихід – обидві температури; перевірити нижню фізичну межу. Показати git diff перед і після git add та історію двох комітів.
- Створити скрипт обчислення часу завантаження за розміром файла в МБ і швидкістю в Мбіт/с з аргументів. Додати
--helpі перевірку додатності. Передати локальний репозиторій із README та контрольним результатом. - Створити venv-проєкт із rich, що виводить таблицю квадратів чисел 1, 2, 3. Зберегти залежності й інструкцію, клонувати локальний репозиторій в інший каталог та відтворити запуск без копіювання .venv.
Тема 2. Типи, операції, керування
- Створити консольну програму Python. Ввести невід’ємну кількість секунд до 1000000. Через divmod вивести повні години, хвилини та секунди форматом HH:MM:SS. Перевірити 0, 59, 60, 3661.
- Створити консольну програму Python. Ввести цілий бал 0..100. Вивести «відмінно» для 90..100, «добре» для 75..89, «задовільно» для 60..74, «незадовільно» для 0..59. Неприпустимий бал відхилити.
- Створити консольну програму Python. Створити меню match із командами square, cube, exit. Для перших двох ввести ціле від -100 до 100 та вивести квадрат або куб; про іншу команду повідомити й повторити меню.
- Створити консольну програму Python. Ввести N=1..100 та N цілих чисел від -1000 до 1000. Без зберігання серії вивести суму, мінімум, максимум і кількість від’ємних чисел.
- Створити консольну програму Python. Ввести додатне ціле до 1000000. Через while, // та % обчислити суму цифр і кількість нульових цифр. Вивести обидва результати.
- Створити консольну програму Python. Ввести два додатні цілі до 1000000. Реалізувати алгоритм Евкліда й вивести НСД, НСК та кількість ітерацій.
- Створити консольну програму Python. Ввести n=2..100000. Через for і else визначити простоту; при знаходженні дільника вивести його та завершити пошук break.
- Створити консольну програму Python. Читати цілі від -100 до 100 до нуля. Від’ємні пропускати через continue, для додатних накопичувати суму й кількість. Вивести середнє або повідомити про відсутність додатних.
- Створити консольну програму Python. Ввести n=1..12. Вкладеними циклами надрукувати таблицю множення 1..n з вирівнюванням полів; вивести кількість надрукованих добутків.
- Створити консольну програму Python. Ввести ціну в цілих копійках 1..100000 і кількість 1..100. За суми від 100000 копійок застосувати 5 відсотків знижки; округлити знижку до цілої копійки правилом HALF_UP. Вивести початкову суму, знижку та результат у гривнях із двома знаками.
Тема 3. Функції
- Створити консольну програму, яка вводить відстань у метрах і одиницю m, cm, km; функцією з лише іменованим параметром unit та значенням за замовчуванням km виконує перетворення, відхиляє невідому одиницю й виводить результат. Використати анотації типів і перевірити допустимість вводу.
- Створити консольну програму, яка вводить від 1 до 10 оцінок 0..100; функцією з
*argsповертає пару мінімум, середнє, а лише іменований параметр precision визначає округлення; друкує обидва результати. Використати анотації типів і перевірити допустимість вводу. - Створити консольну програму, яка вводить назви й суми трьох товарів; передає словник через ** до функції звіту, повертає загальну суму й виводить таблицю та підсумок. Використати анотації типів і перевірити допустимість вводу.
- Створити консольну програму, яка вводить початкові значення двох лічильників і послідовність їх номерів 1 або 2; фабрика створює замикання з nonlocal, виводить нове значення відповідного лічильника після кожного виклику. Використати анотації типів і перевірити допустимість вводу.
- Створити консольну програму, яка вводить n від 0 до 20; рекурсивною анотованою функцією обчислює факторіал із базою n=0, виводить результат та порівнює з ітеративним обчисленням. Використати анотації типів і перевірити допустимість вводу.
- Створити консольну програму, яка вводить два цілі від 0 до 1000000; рекурсивною функцією Евкліда обчислює НСД, для пари 0, 0 приймає результат 0; друкує результат. Використати анотації типів і перевірити допустимість вводу.
- Створити консольну програму, яка вводить рядок із 1..12 цифр; рекурсивними функціями обчислює суму цифр і ознаку паліндрома початкового рядка, зберігаючи значення початкових нулів; друкує обидва результати. Використати анотації типів і перевірити допустимість вводу.
- Створити консольну програму, яка вводить до 20 цілих у неспадному порядку та ціль; рекурсивна функція бінарного пошуку повертає індекс або None, виводить зрозуміле повідомлення та число викликів. Використати анотації типів і перевірити допустимість вводу.
- Створити консольну програму, яка вводить до 6 різних латинських літер; рекурсивна функція повертає їх перестановки, програма друкує кожну та загальну кількість і перевіряє її факторіалом довжини. Використати анотації типів і перевірити допустимість вводу.
- Створити консольну програму, яка вводить ціле число та вибір square або double; передає відповідну функцію функції apply_twice із Callable-анотацією, друкує результат двох застосувань; кожна функція має анотації та docstring. Використати анотації типів і перевірити допустимість вводу.
Тема 4. Винятки та налагодження
- Створити консольну програму, яка повторно читає цілу кількість 1..30 до правильного введення; неправильний формат і діапазон обробляти через ValueError, успішне число вивести. Анотувати функції, перевірити abc, 0, 30.
- Створити програму ділення двох чисел із клавіатури. Відхиляти нескінченні дані, окремо обробляти ValueError і ZeroDivisionError, результат друкувати в else, повідомлення про завершення спроби у finally.
- Створити функцію списання цілої кількості товару. Залишок і запит читати з клавіатури; недодатний запит відхиляти, нестачу подавати як StockError. Вивести новий залишок або відмову та довести незмінність залишку при відмові.
- Написати функцію читання календарної дати ДД.ММ.РРРР через datetime.strptime. Перетворити ValueError на власний DateInputError оператором raise from; вивести ISO-дату або тип її первинної причини.
- Створити консольну програму, що читає з клавіатури ім’я й вік і перевіряє їх: ім’я непорожнє, вік цілий 16..100. Зібрати незалежні помилки в
ExceptionGroup, додати назви полів черезadd_noteта вивести всі повідомлення обробникомexcept* ValueError; для правильних даних вивести прийняту анкету. - Створити програму перетворення трьох рядків із клавіатури на числа. Налаштувати logging у UTF-8-файл: INFO для успіху, logger.exception для ValueError; на екран вивести кількість успішних перетворень.
- Створити функцію середнього балу списку оцінок, у якій навмисно записано помилкову формулу
sum(scores)/(len(scores)-1). Для списку[60, 70, 80, 90]у налагоджувачі показати суму й кількість, виправити функцію та вивести 75.0; порожній список явно відхиляти, для одного елемента повернути його значення. - Створити консольну програму, що читає з клавіатури невід’ємне ціле й виводить його квадрат. Введення перевіряти через
ifіraise ValueError, невід’ємність результату – черезassert. Показати, що введення -1 відхиляється з параметром-Oі без нього. - Створити програму, що для значень
"12","abc", None виконує int і перехоплює ValueError, TypeError без дужок у Python 3.14. Вивести числа або відмови; потім зв’язати об’єкт винятку через as із правильним синтаксисом та показати його args. - Створити функцію нарахування навчальної премії за балом 0..100: 90..100 дає 2000, 75..89 – 1500, 0..74 – 0. Спочатку записати її з початковим
amount=0і двома незалежними перевірками: якщоscore>=90, присвоїтиamount=2000; якщоscore>=75, присвоїтиamount=1500, інакшеamount=0; повернутиamount. Показати умовною точкою зупинки перезапис для 90 і виправити другу перевірку наelif. Вивести результати для 74, 75, 89, 90, 100.
Тема 5. Вбудовані колекції
- Створити консольну програму, яка зчитує цілі числа через пробіл, включенням відбирає додатні, друкує їх квадрати, кожний другий елемент і зворотний порядок. Неправильне число відхилити; порожній список допустимий.
- Створити консольну програму, яка зчитує
ім’я:балдо порожнього рядка, перевіряє непорожні унікальні імена й цілі бали 0–100, сортує за спаданням бала та зростанням імені і друкує нумерований рейтинг. - Створити консольну програму, яка зчитує щонайменше два цілих числа, утворює кортеж, розпаковує перший, останній і решту через зірочку; друкує ці частини та повернені функцією мінімум і максимум. Перевірити неправильний запис і недостатню кількість чисел.
- Створити консольну програму, яка зчитує два списки тегів через кому, прибирає пробіли та регістр, відхиляє порожні теги всередині списку. Друкує перетин, об’єднання, обидві різниці й симетричну різницю в алфавітному порядку; порожній рядок означає порожню множину.
- Створити консольну програму, яка зчитує слова через пробіл, рахує
Counterбез урахування регістру та виводить таблицю частот за спаданням кількості й словом, загальне число слів і число різних слів. Для порожнього введення обидва підсумки дорівнюють нулю. - Створити консольну програму, яка зчитує
група:студентдо порожнього рядка, групує черезdefaultdict(list)і друкує групи та студентів за алфавітом. Відхилити порожні поля й повторну пару, показати підсумки за групами та загальну кількість реєстрацій. - Створити консольну програму черги з командами
add:ім’я,serve,show,exit, які вводяться з клавіатури. Використатиdeque, відхилити порожні імена й невідомі команди, безпечно обробити порожню чергу та вивести число обслугованих і залишок перед завершенням. - Створити консольну програму, яка зчитує
студент:предмет:оцінкадо порожнього рядка, утворює вкладений словник і друкує середні бали студентів. Відхилити порожні поля, повторну пару й оцінку поза 0–100; надрукувати також предмети з оцінками нижче 50. - Створити консольну програму, яка зчитує матрицю як рядки цілих чисел через пробіли, розділені крапкою з комою. Перевірити непорожність і прямокутність, надрукувати транспоновану матрицю, суми рядків та стовпців, перевірити рівність обох загальних сум.
- Створити консольну програму, яка зчитує непорожню прямокутну матрицю цілих чисел, створює поверхневу й глибоку копії та додає 10 до першого елемента поверхневої копії, а 20 до першого елемента глибокої. Надрукувати три матриці, перевірити спільність вкладеного рядка через
isі пояснити, чому вихідна матриця змінилася лише один раз.
Тема 6. Рядки та регулярні вирази
- Створити консольну програму, яка зчитує кілька SMS до порожнього рядка, витягає номери
+380з дев’ятьма цифрами та суми виду12,50 грн; виводить кількість номерів і суму в копійках, ігноруючи записи з від’ємною сумою. - Створити консольну програму, яка зчитує початкову й кінцеву мітки
HH:MM:SS,mmmта цілий зсув у мілісекундах; перевіряє діапазони, порядок і невід’ємність результату та виводить зсунуту пару. - Створити консольну програму, яка зчитує український текст і непорожній ключ із українських літер; шифрує за Віженером у 33-літерному алфавіті, просуваючи ключ лише на літерах, і виводить шифротекст та результат зворотного перетворення.
- Створити консольну програму, яка зчитує ім’я і назву курсу, створює t-рядок для довіреного HTML-абзацу, екранує лише текстові підстановки через
html.escapeта виводить результат; відхиляє conversion і format_spec. - Створити консольну програму, яка зчитує записи
назва;кількість;ціна_копдо порожнього рядка, відхиляє від’ємні значення й довгі назви понад 20 символів; друкує таблицю позицій і загальну суму без обчислень через float. - Створити консольну програму, яка зчитує слова до порожнього рядка, нормалізує NFC і регістр, відхиляє неалфавітні символи, групує анаграми за відсортованими літерами та друкує лише групи з двома різними словами.
- Створити консольну програму, яка зчитує текст, знаходить дати
DD.MM.YYYYіYYYY-MM-DD, перевіряє календар та виводить лише дійсні дати у спільному ISO-форматі з позиціями. - Створити консольну програму, яка зчитує ім’я й цілий бал 0–100; обробляє довірений t-рядок запиту, повертаючи SQL із маркерами
?та список значень; забороняє conversion і format_spec та друкує обидві структури без з’єднання значень із SQL. - Створити консольну програму, яка зчитує рядки до порожнього, допускає ASCII-ключі
[A-Za-z_][A-Za-z0-9_]*, ігнорує коментарі з;на початку, відхиляє дублікати та друкує словник ключів і значень. - Створити консольну програму, яка зчитує формулу без дужок з елементів H, O, C, N, Na, Cl; індекс є додатним цілим, пропущений означає 1; перевіряє повний розбір, сумує повторні елементи й виводить склад.
Тема 7. Генератори та декоратори
- Створити консольну програму Python 3.14. Ввести n від 0 до 100; генераторною функцією видати квадрати чисел 0..n-1, надрукувати послідовність і суму, створивши новий генератор для другого обходу. Анотувати функції й методи; перевірити звичайний і граничний випадки.
- Створити консольну програму Python 3.14. Ввести початок, крок і кількість 1..30; нескінченний генератор арифметичної послідовності обмежити через islice, вивести значення й останній елемент. Анотувати функції й методи; перевірити звичайний і граничний випадки.
- Створити консольну програму Python 3.14. Ввести до 20 цілих; виразом-генератором відфільтрувати додатні та обчислити суму квадратів; для порожнього результату вивести нуль. Анотувати функції й методи; перевірити звичайний і граничний випадки.
- Створити консольну програму Python 3.14. Ввести до 20 пар група:оцінка, оцінки 0..100; groupby після сортування за групою обчислити середнє й кількість, надрукувати таблицю. Анотувати функції й методи; перевірити звичайний і граничний випадки.
- Створити консольну програму Python 3.14. Ввести від 2 до 8 різних назв команд; combinations сформувати пари турніру, надрукувати їх і перевірити число ігор формулою n*(n-1)/2. Анотувати функції й методи; перевірити звичайний і граничний випадки.
- Створити консольну програму Python 3.14. Ввести до 20 пар ім’я:бали; sorted із lambda упорядкувати за спаданням балів і зростанням імені, вивести рейтинг і суму через reduce з початковим нулем. Анотувати функції й методи; перевірити звичайний і граничний випадки.
- Створити консольну програму Python 3.14. Ввести до 10 скінченних чисел та точність 0..4; partial зафіксувати параметр ndigits функції round, map застосувати перетворення, вивести вихідні та округлені значення. Анотувати функції й методи; перевірити звичайний і граничний випадки.
- Створити консольну програму Python 3.14. Ввести до 10 цілих; написати декоратор без параметрів, який через wraps зберігає ім’я функції квадрата й рахує виклики; вивести квадрати, ім’я та лічильник. Анотувати функції й методи; перевірити звичайний і граничний випадки.
- Створити консольну програму Python 3.14. Ввести число спроб 1..5; написати фабрику декоратора повторів лише для TimeoutError і локальну функцію, що неуспішна рівно перші два виклики; вивести результат або вичерпання спроб, перевірити поширення ValueError. Анотувати функції й методи; перевірити звичайний і граничний випадки.
- Створити консольну програму Python 3.14. Ввести до 20 цілих 0..20; lru_cache(maxsize=4) застосувати до чистої функції факторіала, вивести результати та hits/misses, потім очистити кеш і перевірити currsize=0. Анотувати функції й методи; перевірити звичайний і граничний випадки.
Тема 8. Класи та об’єкти
- Створити консольну програму Python 3.14. Ввести ім’я й дві оцінки 0..100; клас Student з ініціалізатором і методом add_grade зберігає окремий список, властивість average повертає середнє або None; вивести результат. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести температуру від -273.15 до 1000; клас Thermometer має властивість із сеттером і перевіркою скінченності; спробувати некоректну зміну й показати незмінність стану. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести дві додатні сторони; клас Rectangle має лише для читання властивість area; вивести площу й перевірити, що присвоєння area відхиляється. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести рядок HH:MM; classmethod TimeOfDay.from_string перевіряє строгий формат і межі, створює об’єкт, __str__ повертає HH:MM; вивести результат або помилку. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести дві точки; staticmethod Point.distance обчислює евклідову відстань, конструктор перевіряє скінченність координат; надрукувати відстань. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести від 1 до 5 непорожніх імен; клас Visitor рахує успішні створення атрибутом класу, порожнє ім’я відхиляє; вивести об’єкти та кількість створень. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести навчальний PIN із чотирьох цифр; клас Card з __pin повертає результат перевірки введеного кандидата без друку PIN, __repr__ показує лише власника; пояснити спотворення імен. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести назву замовлення та до 10 позицій назва:ціна:кількість; Order створює власні Line з невід’ємними цілими цінами й додатними кількостями, обчислювана властивість повертає суму; вивести таблицю. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести до 10 книг із різними кодами; Catalog агрегує Book, знаходить за кодом і повертає список, відсортований за назвою; вивести результат і довести незалежне існування книги після вилучення. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести назву та ціну товару; Product реалізує __str__ для користувача й __repr__ для діагностики, відхиляє порожню назву та від’ємну ціну; надрукувати обидва подання двох незалежних об’єктів. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
Тема 9. Наслідування та протоколи
- Створити консольну програму Python 3.14. Ввести ім’я та дані погодинного й окладного працівника; створити базовий Employee і два похідні класи з super().__init__, перевизначити pay, вивести оплату поліморфним циклом. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести радіуси та сторони фігур; ABC Shape з абстрактним area і готовим describe реалізують Circle і Rectangle; вивести площі, відхилити недодатні й нескінченні розміри. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести заголовок; ABC Report має абстрактну властивість title та метод body, конкретний TextReport їх реалізує; вивести звіт і довести неможливість створення неповного класу. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести дві суми; два непов’язані класи реалізують Protocol Payable.pay для локальної симуляції; спільна функція повертає підтвердження, вивести їх без зовнішніх операцій. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести до 10 об’єктів cube або sphere із розмірами 0.1..100; ABC Solid задає volume, поліморфно відсортувати за об’ємом і вивести таблицю та суму. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести до 10 пар ім’я:бали; клас Record із міксином JSON-подання серіалізує дані, вивести JSON і MRO, перевірити відсутність дубльованих ініціалізацій. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести заголовок і пункти документа; ABC Document реалізує шаблонний render, підкласи Letter і Checklist визначають body; вивести обидва документи без перевірок їх типів у циклі. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести текст і стиль upper або plain; Logger отримує незалежний Formatter через Protocol та буферний Writer, делегує форматування й запис; вивести буфер, замінити форматер без нового підкласу Logger. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Створити ромб A,B(A),C(A),D(B,C) із кооперативним методом trace; ввести рядок-початок, надрукувати MRO та послідовність відвіданих класів, довести одноразовий виклик A. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
- Створити консольну програму Python 3.14. Ввести число та обрати реалізацію Protocol Converter; дві незалежні реалізації подвоюють або підносять до квадрата, спільний клієнт виводить результат. Показати окремим некоректним об’єктом, що runtime_checkable не перевіряє сигнатури. Анотувати функції й методи; перевірити звичайний і граничний випадки. Подати UML класів.
Тема 10. Спеціальні методи, dataclass
- Створити консольну програму з класом
Point, що читає дві координати й має анотовані спеціальні методи__repr__,__str__і__format__. Вивести всі три подання точки; для формату.2fпоказати два знаки після крапки. - Створити консольну програму, що читає дві цілі невід’ємні тривалості в секундах і зберігає їх у незмінному класі з рівністю, порядком через
total_orderingі сумісним хешем. Вивести результат порівняння та число різних значень у множині. - Створити Vector для пари чисел із додаванням і відбитим додаванням нуля. Вивести sum для векторів (1, 2), (3, 4), перевірити незмінність операндів і TypeError для додавання рядка.
- Створити консольну програму з контейнером
Playlist, що читає три назви треків і підтримує довжину, індексування, зрізи та ітерацію. Вивести останню назву, перші дві й результат двох незалежних обходів. - Створити консольну програму з викличним класом
Linear(метод__call__), що читає коефіцієнти a, b і число x та виводитьa*x+b; перевірити випадок нульового коефіцієнта. - Створити програму з менеджером контексту
Timerна основіperf_counter. Вимірятиsum(range(1000)), вивести результат і ознаку невід’ємності часу; довести, щоValueErrorз тіла блокуwithне пригнічується. - Створити dataclass Product з непорожньою назвою й невід’ємною цілою ціною в копійках. Прочитати дані, виконати валідацію через
__post_init__, вивести товар або ValueError. - Створити frozen dataclass Event з order=True, полями день 1..7, час 0..1439 і назва. Прочитати три події та вивести їх за днем і часом; однакові ключі впорядкувати за назвою.
- Створити Flag прав READ, WRITE, EXECUTE. Прочитати два набори R, W, X, вивести об’єднання й перетин, перевірити право WRITE; невідомі символи відхиляти.
- Створити dataclass Circle(radius) і Rectangle(width,height). Прочитати тип і додатні розміри, через match обчислити та вивести площу; використати іменовані шаблони атрибутів.
Тема 11. Модулі, файли, pytest
- Створити пакет geometry з core.py та
__main__.py: функція площі прямокутника, argparse для двох додатних сторін. Запустити через python -m geometry, вивести площу та довідку--help. - Створити консольну команду, що приймає шлях і опцію
--suffix. Через pathlib вивести відсортовані відносні шляхи й байти відповідних звичайних файлів; символічні посилання пропускати. - Створити консольну програму, що отримує шляхи вхідного й вихідного UTF-8-файлів, читає вхідний файл построково та записує у вихідний лише непорожні рядки. Заборонити однакові шляхи, повідомити про відсутній вхід, перевірити тестом із
tmp_path. - Створити модуль із dataclass
Product(name, cents)і функціями збереження списку товарів у JSON-файл та відновлення з нього. Ціна має бути невід’ємнимintбезbool, назва непорожня; перевіряти точні ключі. Для двох товарів вивести суму та написати тестround-trip. - Створити консольну програму, що читає CSV-файл із колонками
name;scoreчерезDictReader, перевіряє заголовок, кількість полів і бали 0..100. Вивести середній бал або відмову для порожнього файла; записати нормалізований CSV черезDictWriter. - Написати функцію квадрата невід’ємного числа та параметризовані pytest для 0, 1, 5 з очікуваннями 0, 1, 25. Для -1 очікувати ValueError через raises.
- Створити модуль JSON-сховища контактів із функціями збереження й читання та тест через
tmp_path: зберегти ім’я Олена і телефон 0123, прочитати й перевірити рівність та збереження початкового нуля. - Створити функцію
greet, яка читає ім’я черезinputі друкує «Вітаю, ім’я!». Написати тест ізmonkeypatchдля введення Олена таcapsysдля перевірки точного виводу з новим рядком. - Створити фікстуру pytest, що повертає новий список оцінок [70,80,90]. Написати незалежні тести середнього 80 і додавання оцінки; довести, що зміни одного тесту не переходять до іншого.
- Створити конвертер CSV name;quantity у JSON. Неправильний від’ємний quantity має давати ValueError до запису. Тестом
tmp_pathдовести, що файл виходу зі старим текстом залишився незмінним.
Тема 12. Бази даних, SQL, SQLAlchemy
- Створити SQLite-таблиці
authors(id,name)іbooks(id,title,author_id)з PK, FK та NOT NULL. Через меню додати автора й книгу, вивести JOIN; перевірити відмову для відсутнього автора. - Створити contacts(id,name,phone UNIQUE), виконати параметризовані INSERT, UPDATE за id та DELETE за id із даними клавіатури. Вивести залишок і перевірити, що лапка в імені не змінює SQL.
- Створити консольну програму sqlite3 з таблицею
products(id,name,cents)і трьома навчальними товарами. Програма читає мінімальну ціну в копійках і виводить товари, не дешевші за неї, черезWHEREтаORDER BY cents, id; неправильну суму відхилити. - Створити sales(id,category,cents), додати записи A:100, A:200, B:50. Через GROUP BY і HAVING вивести категорії із сумою від 100; очікується A:300.
- Створити students і grades з FK. Додати студента з оцінками 80, 100 та студента без оцінок. Через LEFT JOIN вивести кількість і середнє; відсутність середнього показати явно.
- Створити програму sqlite3 з таблицею
orders(id,cents), що містить рядок (1,1000), і функцією імпорту пакета рядків однією транзакцією. Імпорт пакета (2,2000), (1,3000) через порушення PK має відкотитися повністю; вивести лише початковий рядок і перевірити це тестом pytest. - Створити програму SQLAlchemy з ORM-моделлю
ProductчерезDeclarativeBase,Mappedіmapped_column: id PK, name UNIQUE, cents CHECK ≥ 0. Додати два товари вSession.begin, виконатиselectза ціною й вивести назви. - Створити програму SQLAlchemy з ORM-моделями
AuthorіBook, пов’язаними черезForeignKeyтаrelationship/back_populates. Додати автора з двома книгами, отримати їх черезselectinloadі вивести назви; показати згенеровані запити. - Створити ORM-репозиторій товарів, який приймає Session і не виконує commit самостійно. Тестом pytest довести відкат двох додавань з однаковим унікальним кодом.
- Створити консольну програму з таблицями
students,coursesіenrollments(складений PK, полеgrade0..100) на sqlite3 або SQLAlchemy. Додати один запис на курс, відхилити повтор пари «студент, курс» і вивести студента, курс та оцінку.
Тема 13. NumPy, pandas, Matplotlib
- Створити програму pandas, яка приймає шлях UTF-8 CSV зі схемою
room,date,value; дата ISO, value у °C від -40 до 60; перевіряє стовпці, діапазони й непорожні текстові ключі, повідомляє причини відхилення та друкує середні температури за аудиторіями. Для порожнього коректного набору вивести повідомлення замість хибного підсумку. - Створити програму pandas, яка приймає шлях UTF-8 CSV зі схемою
station,date,value; дата ISO, опади 0–500 мм; перевіряє стовпці, діапазони й непорожні текстові ключі, повідомляє причини відхилення та друкує суми й кількість сухих днів за станціями. Для порожнього коректного набору вивести повідомлення замість хибного підсумку. - Створити програму pandas, яка приймає шлях UTF-8 CSV зі схемою
category,date,qty,price; дата ISO, qty ціле 1–1000, price ціле 0–100000 копійок; перевіряє стовпці, діапазони й непорожні текстові ключі, повідомляє причини відхилення та друкує виручку за категоріями без float-грошової арифметики. Для порожнього коректного набору вивести повідомлення замість хибного підсумку. - Створити програму pandas, яка приймає шлях UTF-8 CSV зі схемою
group,date,present,total; дата ISO, цілі 0≤present≤total≤100, total>0; перевіряє стовпці, діапазони й непорожні текстові ключі, повідомляє причини відхилення та друкує частки sum(present)/sum(total) за групами. Для порожнього коректного набору вивести повідомлення замість хибного підсумку. - Створити програму pandas, яка приймає шлях UTF-8 CSV зі схемою
item,date,value; дата ISO, цілі залишки 0–100000; перевіряє стовпці, діапазони й непорожні текстові ключі, повідомляє причини відхилення та друкує останній за датою залишок кожного товару, не суму залишків. Для порожнього коректного набору вивести повідомлення замість хибного підсумку. - Створити програму pandas, яка приймає шлях UTF-8 CSV зі схемою
meter,date,value; дата ISO, накопичені показання 0–1000000 літрів; перевіряє стовпці, діапазони й непорожні текстові ключі, повідомляє причини відхилення та друкує різниці сусідніх впорядкованих показань; зменшення відхиляти. Для порожнього коректного набору вивести повідомлення замість хибного підсумку. - Створити програму pandas, яка приймає шлях UTF-8 CSV зі схемою
line,date,defects,total; дата ISO, цілі 0≤defects≤total≤100000, total>0; перевіряє стовпці, діапазони й непорожні текстові ключі, повідомляє причини відхилення та друкує зважені частки дефектів за лініями. Для порожнього коректного набору вивести повідомлення замість хибного підсумку. - Створити програму pandas, яка приймає шлях UTF-8 CSV зі схемою
device,time,value; ISO-час YYYY-MM-DD HH:MM, заряд 0–100 відсотків; перевіряє стовпці, діапазони й непорожні текстові ключі, повідомляє причини відхилення та друкує різниці рівнів у часовому порядку за пристроями. Для порожнього коректного набору вивести повідомлення замість хибного підсумку. - Створити програму pandas, яка приймає шлях UTF-8 CSV зі схемою
region,sent,delivered; обидві дати ISO, delivered не раніше sent, тривалість до 60 днів; перевіряє стовпці, діапазони й непорожні текстові ключі, повідомляє причини відхилення та друкує медіану тривалості та кількість доставок за регіоном. Для порожнього коректного набору вивести повідомлення замість хибного підсумку. - Створити програму pandas, яка приймає шлях UTF-8 CSV зі схемою
series,repeat,value; repeat додатне ціле, value скінченне в межах ±1000000, ключ series,repeat унікальний; перевіряє стовпці, діапазони й непорожні текстові ключі, повідомляє причини відхилення та друкує середні, std з ddof=0 та кількості повторів за серіями. Для порожнього коректного набору вивести повідомлення замість хибного підсумку.
Тема 14. Графічні застосунки PySide6
- Створити вікно QFormLayout із ціною в копійках, кількістю 1–100 і QLabel підсумку. Оновлювати суму після зміни кожного поля, перевірити нульову ціну й верхню межу кількості.
- Створити форму конвертера метрів у сантиметри з QLineEdit, QDoubleValidator і кнопкою. Узгодити локаль валідатора й перетворення; для проміжного запису показати пояснення без обчислення.
- Створити два QDoubleSpinBox для Celsius і Fahrenheit, з’єднати їх двостороннім перерахунком без рекурсії через QSignalBlocker. Перевірити 0 °C і 212 °F.
- Створити власний QWidget із Signal(int), кнопками збільшення й скидання лічильника. Підпис і заголовок повинні оновлюватися двома слухачами одного сигналу.
- Створити QMainWindow із центральним QPlainTextEdit, меню і панеллю, що використовують одну QAction очищення. Перед очищенням непорожнього тексту запитати підтвердження; показувати кількість символів у рядку стану.
- Створити таймер зворотного відліку 1–60 секунд із QTimer, стартом і скасуванням. Рахувати залишок від монотонного часу, після завершення вимкнути таймер і показати 0.
- Створити список справ із QLineEdit та QListWidget. Додавати клавішею Enter або кнопкою, не приймати пробільний текст, видаляти вибраний елемент і вимикати видалення без вибору.
- Створити у Designer форму з полем і кнопкою, зберегти .ui, згенерувати модуль pyside6-uic та підключити власний слот у окремому класі. Кнопка показує введений непорожній текст у QLabel; згенерований файл не редагувати.
- Створити анкету з ім’ям, віком 16–100 і прапорцем згоди. Надсилання доступне тільки при заповненій формі; слот повторно перевіряє умови й надсилає Signal(str,int).
- Створити форму з числовим полем і підписом перевірки. Неправильний запис позначати QSS-рамкою та пояснювальним текстом; після виправлення прибирати помилку. Перевірити збільшений масштаб і навігацію Tab.
Тема 15. Model/View і бази даних
- Створити QAbstractTableModel над списком dataclass із назвою й цілою кількістю. Реалізувати rowCount, columnCount, data, headerData та показати QTableView; непідтримувані ролі повертають None, дійсний parent не має дітей.
- Створити табличну модель оцінок 0–100 із DisplayRole, EditRole, ToolTipRole і кольором низького бала. Реалізувати flags/setData; неправильне значення повертає False без зміни даних, успішне надсилає dataChanged.
- Створити вікно власної таблиці контактів із додаванням і видаленням рядків. Використати beginInsertRows/endInsertRows і beginRemoveRows/endRemoveRows, перевірити порожнє ім’я й відсутній вибір.
- Створити таблицю товарів із QSortFilterProxyModel, буквальним пошуком назви й сортуванням ціни. Видалення вибраного запису повинно застосовувати mapToSource; перевірити після зміни порядку.
- Створити QDialog із назвою та додатною ціною в копійках, QDialogButtonBox і валідацією перед accept. Після Accepted додати запис до моделі; Cancel не змінює її.
- Створити графічний імпорт CSV name,amount через QFileDialog. Перевірити весь файл до додавання рядків, відхилити порожні назви й від’ємні суми; Cancel і неправильний файл залишають модель без змін.
- Створити QSqlTableModel над навчальною SQLite-таблицею з OnManualSubmit, кнопками збереження й скасування. Перевіряти submitAll, використовувати транзакцію та показувати lastError у разі відмови.
- Створити QStyledItemDelegate з QComboBox трьох статусів для таблиці завдань. Реалізувати createEditor, setEditorData і setModelData; невідомий статус повинна відхиляти також модель.
- Створити master-detail: список категорій і таблицю товарів вибраної категорії. Використати стабільний id, показати порожні деталі без вибору й зберегти правильний зв’язок після сортування.
- Створити таблицю з експортом усіх рядків CSV через QFileDialog та збереженням геометрії QSettings. Обробити Cancel і OSError, використати UTF-8 та явний заголовок; перевірити відновлення вікна при повторному запуску.
Тема 16. Пакування та типізація
- Створити src-пакет конвертера метрів у сантиметри для скінченних чисел 0–1000. Додати pyproject.toml, README й консольну точку входу; команда приймає число та друкує результат із двома знаками, неправильний вхід дає код 2.
- Створити пакет із функцією середнього непорожнього списку float, зібрати wheel та sdist. Встановити wheel у чисте середовище поза джерелами й довести шлях імпортованого модуля; перевірити [2,4,6] та порожній список.
- Створити модуль з узагальненою функцією
first[T], що повертає перший елементSequence[T], і класомStack[T]з методамиpush/pop. Порожній вхід даєValueErrorабоIndexErrorвідповідно. Перевірити роботу зintіstrчерез pytest, а неправильний тип аргументу відхилити окремим запуском mypy. - Створити модуль з узагальненим кешем
Cache[K: Hashable, V]із методамиput/getі місткістю 1–10; додавання нового ключа до повного кешу породжуєValueError, відсутній ключ даєKeyError. Перевірити типи ключів і значень через mypy та поведінку через pytest. - Створити консольну програму, що читає конфігурацію з JSON-файла, шлях до якого передано аргументом, і описує її через
TypedDict:mode(shortабоfull) іlimit(1–100). Перевірити фактичні типи й невідомі ключі та надрукувати прийняту конфігурацію; неправильний файл дає код 2. - Створити модуль із функцією add(int, int) та навмисним викликом
add(1, "2"). Продемонструвати ненульовий результат mypy, виправити виклик без Any або ignore, повторити strict-перевірку й тест add(1,2)==3. - Створити маленький src-пакет геометрії з pytest. Налаштувати Ruff для Python 3.14, правил F/I/B/UP і ширини 70; продемонструвати check та
format --checkпісля виправлення невикористаного імпорту, переглянути різницю. - Створити PySide6-вікно з написом із JSON-ресурсу поруч із модулем. Зібрати PyInstaller onedir із
--add-data, запустити з іншого робочого каталогу й показати правильний напис; описати поведінку за відсутності ресурсу. - Створити модуль із декоратором
logged[**P, T], який друкує назву функції й повертає її результат без зміни сигнатури. Перевірити декоровану функцію з позиційним і ключовим аргументом, а неправильний виклик відхилити через mypy. - Створити пакет з типізованою функцією площі прямокутника, що відхиляє недодатні й нескінченні сторони. Додати pytest, mypy, Ruff і YAML-процес CI без публікації; локально виконати ті самі команди та зібрати wheel.