Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Кожне формулювання повністю визначає окрему програму. Використовуйте Python 3.14, анотації параметрів і результатів функцій та стандартну бібліотеку. Для кількох типів без зв’язування об’єкта застосовуйте except ValueError, TypeError:; із as використовуйте дужки. Усі тарифи, курси, ліміти та медичні параметри нижче – вигадані константи для перевірки програм. Задача дозування є арифметичним симулятором без реальних назв препаратів. Грошові суми зберігайте цілими одиницями або копійками відповідно до умови. Для дійсних даних відхиляйте NaN і нескінченності. Не використовуйте eval для калькулятора; обирайте дозволені операції через розгалуження.
Варіанти
Варіант 1. Бронювання квитків
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури кількість місць від 1 до 50 та запит від 1 до 50. Перевірити: запит не більший за доступні місця. Вивести залишок місць після бронювання або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури кількість місць від 1 до 50 та запит від 1 до 50. Перевірити: запит не більший за доступні місця. Вивести залишок місць після бронювання або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток SeatsError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури кількість місць від 1 до 50 та запит від 1 до 50. Перевірити: запит не більший за доступні місця. Вивести залишок місць після бронювання або зрозуміле повідомлення про відмову. Реалізувати власний SeatsError, функції з анотаціями, журнал logging та таку поведінку: повторювати запит до успіху або команди stop. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 2. Банківські перекази
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури залишок від 0 до 1000000 копійок та додатну суму переказу. Перевірити: сума не перевищує залишок. Вивести новий залишок у копійках або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури залишок від 0 до 1000000 копійок та додатну суму переказу. Перевірити: сума не перевищує залишок. Вивести новий залишок у копійках або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток FundsError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури залишок від 0 до 1000000 копійок та додатну суму переказу. Перевірити: сума не перевищує залишок. Вивести новий залишок у копійках або зрозуміле повідомлення про відмову. Реалізувати власний FundsError, функції з анотаціями, журнал logging та таку поведінку: зберігати причину неправильного перетворення суми через raise from. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 3. Автомат із напоями
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури кількість напоїв 0..20, оплату та запас решти у цілих гривнях. Перевірити: ціна напою 25, є товар, оплата не менша за ціну та вистачає решти. Вивести решту та залишок товару або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури кількість напоїв 0..20, оплату та запас решти у цілих гривнях. Перевірити: ціна напою 25, є товар, оплата не менша за ціну та вистачає решти. Вивести решту та залишок товару або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток VendingError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури кількість напоїв 0..20, оплату та запас решти у цілих гривнях. Перевірити: ціна напою 25, є товар, оплата не менша за ціну та вистачає решти. Вивести решту та залишок товару або зрозуміле повідомлення про відмову. Реалізувати власний VendingError, функції з анотаціями, журнал logging та таку поведінку: розрізняти власними типами відсутність напою й нестачу решти. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 4. Навчальний симулятор дозування
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури умовну масу 1..100 і коефіцієнт 1..5 одиниць на одиницю маси. Перевірити: добуток маси й коефіцієнта не перевищує умовну межу 200. Вивести умовний добуток без назв реальних препаратів або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури умовну масу 1..100 і коефіцієнт 1..5 одиниць на одиницю маси. Перевірити: добуток маси й коефіцієнта не перевищує умовну межу 200. Вивести умовний добуток без назв реальних препаратів або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток DoseModelError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури умовну масу 1..100 і коефіцієнт 1..5 одиниць на одиницю маси. Перевірити: добуток маси й коефіцієнта не перевищує умовну межу 200. Вивести умовний добуток без назв реальних препаратів або зрозуміле повідомлення про відмову. Реалізувати власний DoseModelError, функції з анотаціями, журнал logging та таку поведінку: збирати незалежні помилки двох параметрів у ExceptionGroup із add_note; це лише вигадана арифметична модель. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 5. Калькулятор виразів
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури два скінченні дійсні операнди й знак +, -, * або /. Перевірити: знак дозволений, дільник ненульовий, результат скінченний. Вивести результат із чотирма знаками після крапки або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури два скінченні дійсні операнди й знак +, -, * або /. Перевірити: знак дозволений, дільник ненульовий, результат скінченний. Вивести результат із чотирма знаками після крапки або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток OperationError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури два скінченні дійсні операнди й знак +, -, * або /. Перевірити: знак дозволений, дільник ненульовий, результат скінченний. Вивести результат із чотирма знаками після крапки або зрозуміле повідомлення про відмову. Реалізувати власний OperationError, функції з анотаціями, журнал logging та таку поведінку: обирати операцію без eval і розрізняти формат, невідому операцію та ділення на нуль. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 6. Ліфт
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури номер поверху 1..16, кількість пасажирів 1..8 та сумарну масу 1..1000 кг. Перевірити: маса не перевищує умовну вантажність 600 кг. Вивести дозвіл руху й обраний поверх або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури номер поверху 1..16, кількість пасажирів 1..8 та сумарну масу 1..1000 кг. Перевірити: маса не перевищує умовну вантажність 600 кг. Вивести дозвіл руху й обраний поверх або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток OverloadError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури номер поверху 1..16, кількість пасажирів 1..8 та сумарну масу 1..1000 кг. Перевірити: маса не перевищує умовну вантажність 600 кг. Вивести дозвіл руху й обраний поверх або зрозуміле повідомлення про відмову. Реалізувати власний OverloadError, функції з анотаціями, журнал logging та таку поведінку: зберігати поточний поверх та змінювати його тільки після успішного виклику. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 7. Реєстрація користувача
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури ім’я, вік та пароль. Перевірити: ім’я непорожнє, вік 16..100, пароль має не менш як 8 символів. Вивести повідомлення про прийняття анкети без показу пароля або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури ім’я, вік та пароль. Перевірити: ім’я непорожнє, вік 16..100, пароль має не менш як 8 символів. Вивести повідомлення про прийняття анкети без показу пароля або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток RegistrationError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури ім’я, вік та пароль. Перевірити: ім’я непорожнє, вік 16..100, пароль має не менш як 8 символів. Вивести повідомлення про прийняття анкети без показу пароля або зрозуміле повідомлення про відмову. Реалізувати власний RegistrationError, функції з анотаціями, журнал logging та таку поведінку: збирати всі порушення в ExceptionGroup із назвами полів у add_note; пароль не журналювати. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 8. Конвертер дат
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури дату у вигляді ДД.ММ.РРРР. Перевірити: запис має 10 символів та є календарною датою з роком 1..9999. Вивести дату у форматі РРРР-ММ-ДД або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури дату у вигляді ДД.ММ.РРРР. Перевірити: запис має 10 символів та є календарною датою з роком 1..9999. Вивести дату у форматі РРРР-ММ-ДД або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток DateFormatError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури дату у вигляді ДД.ММ.РРРР. Перевірити: запис має 10 символів та є календарною датою з роком 1..9999. Вивести дату у форматі РРРР-ММ-ДД або зрозуміле повідомлення про відмову. Реалізувати власний DateFormatError, функції з анотаціями, журнал logging та таку поведінку: дозволити вибір одного з форматів ДД.ММ.РРРР або РРРР-ММ-ДД та зберігати ValueError через raise from. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 9. Склад матеріалів
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури залишок 0..1000 та кількість списання 1..1000 одиниць. Перевірити: списання не перевищує залишок. Вивести новий залишок або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури залишок 0..1000 та кількість списання 1..1000 одиниць. Перевірити: списання не перевищує залишок. Вивести новий залишок або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток StockError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури залишок 0..1000 та кількість списання 1..1000 одиниць. Перевірити: списання не перевищує залишок. Вивести новий залишок або зрозуміле повідомлення про відмову. Реалізувати власний StockError, функції з анотаціями, журнал logging та таку поведінку: розрізняти від’ємну кількість і нестачу матеріалу власними типами. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 10. Електронний щоденник
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три цілі оцінки. Перевірити: кожна оцінка належить 0..100. Вивести середній бал із двома знаками або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три цілі оцінки. Перевірити: кожна оцінка належить 0..100. Вивести середній бал із двома знаками або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток GradeError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три цілі оцінки. Перевірити: кожна оцінка належить 0..100. Вивести середній бал із двома знаками або зрозуміле повідомлення про відмову. Реалізувати власний GradeError, функції з анотаціями, журнал logging та таку поведінку: збирати всі неправильні оцінки в ExceptionGroup з номерами полів у add_note. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 11. Платіжний термінал
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури PIN як рядок та суму зняття у цілих одиницях. Перевірити: навчальний PIN дорівнює 1234, сума 1..5000. Вивести підтвердження дозволеної суми або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури PIN як рядок та суму зняття у цілих одиницях. Перевірити: навчальний PIN дорівнює 1234, сума 1..5000. Вивести підтвердження дозволеної суми або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток TerminalError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури PIN як рядок та суму зняття у цілих одиницях. Перевірити: навчальний PIN дорівнює 1234, сума 1..5000. Вивести підтвердження дозволеної суми або зрозуміле повідомлення про відмову. Реалізувати власний TerminalError, функції з анотаціями, журнал logging та таку поведінку: дати рівно три спроби PIN, після трьох відмов припинити сеанс; PIN не записувати в журнал. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 12. Метеостанція
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури температуру та вологість як скінченні числа. Перевірити: температура від -50 до 60, вологість 0..100. Вивести прийняті показання або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури температуру та вологість як скінченні числа. Перевірити: температура від -50 до 60, вологість 0..100. Вивести прийняті показання або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток SensorError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури температуру та вологість як скінченні числа. Перевірити: температура від -50 до 60, вологість 0..100. Вивести прийняті показання або зрозуміле повідомлення про відмову. Реалізувати власний SensorError, функції з анотаціями, журнал logging та таку поведінку: писати WARNING для температури поза -20..40, але в дозволеному діапазоні, ERROR для відхилення. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 13. Тестування знань
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три відповіді A, B або C. Перевірити: кожна відповідь є одним дозволеним символом. Вивести число збігів із ключем A, C, B або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три відповіді A, B або C. Перевірити: кожна відповідь є одним дозволеним символом. Вивести число збігів із ключем A, C, B або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток AnswerError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три відповіді A, B або C. Перевірити: кожна відповідь є одним дозволеним символом. Вивести число збігів із ключем A, C, B або зрозуміле повідомлення про відмову. Реалізувати власний AnswerError, функції з анотаціями, журнал logging та таку поведінку: повторювати неправильну відповідь для того самого питання; кожна правильна дає один бал. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 14. Розклад потягів
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури годину 0..23 і хвилину 0..59 прибуття. Перевірити: час не належить зайнятому інтервалу 10:00..10:14 включно. Вивести дозвіл використовувати колію та час у хвилинах від початку доби або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури годину 0..23 і хвилину 0..59 прибуття. Перевірити: час не належить зайнятому інтервалу 10:00..10:14 включно. Вивести дозвіл використовувати колію та час у хвилинах від початку доби або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток TrackConflictError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури годину 0..23 і хвилину 0..59 прибуття. Перевірити: час не належить зайнятому інтервалу 10:00..10:14 включно. Вивести дозвіл використовувати колію та час у хвилинах від початку доби або зрозуміле повідомлення про відмову. Реалізувати власний TrackConflictError, функції з анотаціями, журнал logging та таку поведінку: обробити три заявки послідовно; успішна займає колію на 15 хвилин, перетин інтервалів заборонений. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 15. Паркомат
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури тривалість 1..24 години та оплату цілими гривнями. Перевірити: оплата покриває тариф 20 гривень за годину. Вивести вартість і решту або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури тривалість 1..24 години та оплату цілими гривнями. Перевірити: оплата покриває тариф 20 гривень за годину. Вивести вартість і решту або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток PaymentError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури тривалість 1..24 години та оплату цілими гривнями. Перевірити: оплата покриває тариф 20 гривень за годину. Вивести вартість і решту або зрозуміле повідомлення про відмову. Реалізувати власний PaymentError, функції з анотаціями, журнал logging та таку поведінку: у finally друкувати номер спроби й статус прийнято або відхилено, не видавати успішну квитанцію при відмові. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 16. Навчальна кредитна заявка
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури ім’я, вік та місячний дохід у цілих умовних одиницях. Перевірити: ім’я непорожнє, вік 18..100, дохід 0..1000000. Вивести умовне рішення: прийнято за доходу від 10000, інакше відмовлено або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури ім’я, вік та місячний дохід у цілих умовних одиницях. Перевірити: ім’я непорожнє, вік 18..100, дохід 0..1000000. Вивести умовне рішення: прийнято за доходу від 10000, інакше відмовлено або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток ApplicationError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури ім’я, вік та місячний дохід у цілих умовних одиницях. Перевірити: ім’я непорожнє, вік 18..100, дохід 0..1000000. Вивести умовне рішення: прийнято за доходу від 10000, інакше відмовлено або зрозуміле повідомлення про відмову. Реалізувати власний ApplicationError, функції з анотаціями, журнал logging та таку поведінку: збирати помилки полів у ExceptionGroup, відрізняти чинну відхилену заявку від неправильних даних. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 17. Система двох рівнянь
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури шість цілих коефіцієнтів a, b, c, d, e, f від -100 до 100 для a*x+b*y=c та d*x+e*y=f. Перевірити: визначник D=a*e-b*d ненульовий. Вивести x=(c*e-b*f)/D та y=(a*f-c*d)/D або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури шість цілих коефіцієнтів a, b, c, d, e, f від -100 до 100 для a*x+b*y=c та d*x+e*y=f. Перевірити: визначник D=a*e-b*d ненульовий. Вивести x=(c*e-b*f)/D та y=(a*f-c*d)/D або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток SingularSystemError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури шість цілих коефіцієнтів a, b, c, d, e, f від -100 до 100 для a*x+b*y=c та d*x+e*y=f. Перевірити: визначник D=a*e-b*d ненульовий. Вивести x=(c*e-b*f)/D та y=(a*f-c*d)/D або зрозуміле повідомлення про відмову. Реалізувати власний SingularSystemError, функції з анотаціями, журнал logging та таку поведінку: перевіряти обидві підстановки з похибкою 1e-9 та журналювати вироджені системи. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 18. Таймер тренувань
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури кількість інтервалів 1..10 і тривалість 1..5 секунд. Перевірити: обидва числа цілі в указаних межах. Вивести номер кожного завершеного інтервалу після time.sleep або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури кількість інтервалів 1..10 і тривалість 1..5 секунд. Перевірити: обидва числа цілі в указаних межах. Вивести номер кожного завершеного інтервалу після time.sleep або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток IntervalError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури кількість інтервалів 1..10 і тривалість 1..5 секунд. Перевірити: обидва числа цілі в указаних межах. Вивести номер кожного завершеного інтервалу після time.sleep або зрозуміле повідомлення про відмову. Реалізувати власний IntervalError, функції з анотаціями, журнал logging та таку поведінку: обробляти KeyboardInterrupt на рівні сеансу та в finally повідомляти кількість повністю завершених інтервалів. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 19. Обмін валют
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури код USD або EUR та додатну суму до 1000000 цілих гривень. Перевірити: код відомий і сума належить межам. Вивести суму іноземної валюти за навчальним курсом 40 грн/USD або 50 грн/EUR із двома знаками або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури код USD або EUR та додатну суму до 1000000 цілих гривень. Перевірити: код відомий і сума належить межам. Вивести суму іноземної валюти за навчальним курсом 40 грн/USD або 50 грн/EUR із двома знаками або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток CurrencyError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури код USD або EUR та додатну суму до 1000000 цілих гривень. Перевірити: код відомий і сума належить межам. Вивести суму іноземної валюти за навчальним курсом 40 грн/USD або 50 грн/EUR із двома знаками або зрозуміле повідомлення про відмову. Реалізувати власний CurrencyError, функції з анотаціями, журнал logging та таку поведінку: обробити три запити та зберегти причину неправильного формату суми через raise from. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 20. GPS-відстань
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури широту й довготу двох точок у градусах. Перевірити: скінченні широти належать -90..90, довготи -180..180. Вивести відстань 2*6371*asin(sqrt(h)) км, де h=u+v, u=sin((p2-p1)/2)**2, v=cos(p1)*cos(p2)*sin((l2-l1)/2)**2, p1,p2 – широти, l1,l2 – довготи в радіанах або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури широту й довготу двох точок у градусах. Перевірити: скінченні широти належать -90..90, довготи -180..180. Вивести відстань 2*6371*asin(sqrt(h)) км, де h=u+v, u=sin((p2-p1)/2)**2, v=cos(p1)*cos(p2)*sin((l2-l1)/2)**2, p1,p2 – широти, l1,l2 – довготи в радіанах або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток CoordinateError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури широту й довготу двох точок у градусах. Перевірити: скінченні широти належать -90..90, довготи -180..180. Вивести відстань 2*6371*asin(sqrt(h)) км, де h=u+v, u=sin((p2-p1)/2)**2, v=cos(p1)*cos(p2)*sin((l2-l1)/2)**2, p1,p2 – широти, l1,l2 – довготи в радіанах або зрозуміле повідомлення про відмову. Реалізувати власний CoordinateError, функції з анотаціями, журнал logging та таку поведінку: збирати помилки координат у ExceptionGroup; перед sqrt обмежити h до 0..1 для похибки округлення. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 21. Бюджет подорожі
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури бюджет 1..1000000 і три витрати 0..1000000 цілих гривень. Перевірити: сума витрат не перевищує бюджет. Вивести суму та невикористаний бюджет або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури бюджет 1..1000000 і три витрати 0..1000000 цілих гривень. Перевірити: сума витрат не перевищує бюджет. Вивести суму та невикористаний бюджет або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток BudgetError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури бюджет 1..1000000 і три витрати 0..1000000 цілих гривень. Перевірити: сума витрат не перевищує бюджет. Вивести суму та невикористаний бюджет або зрозуміле повідомлення про відмову. Реалізувати власний BudgetError, функції з анотаціями, журнал logging та таку поведінку: писати WARNING, коли витрачено від 80 відсотків бюджету, а перевищення відхиляти власним винятком. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 22. Замовлення піци
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури розмір S, M або L та кількість добавок 0..5. Перевірити: розмір дозволений і кількість ціла у межах. Вивести чек: базова ціна 100, 150 або 200 плюс 20 за добавку або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури розмір S, M або L та кількість добавок 0..5. Перевірити: розмір дозволений і кількість ціла у межах. Вивести чек: базова ціна 100, 150 або 200 плюс 20 за добавку або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток OrderError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури розмір S, M або L та кількість добавок 0..5. Перевірити: розмір дозволений і кількість ціла у межах. Вивести чек: базова ціна 100, 150 або 200 плюс 20 за добавку або зрозуміле повідомлення про відмову. Реалізувати власний OrderError, функції з анотаціями, журнал logging та таку поведінку: збирати незалежні помилки розміру та добавок у ExceptionGroup і не друкувати чек при відмові. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 23. Існування трикутника
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три цілі сторони від 1 до 10000. Перевірити: сума кожних двох сторін більша за третю. Вивести периметр трикутника або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три цілі сторони від 1 до 10000. Перевірити: сума кожних двох сторін більша за третю. Вивести периметр трикутника або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток TriangleError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три цілі сторони від 1 до 10000. Перевірити: сума кожних двох сторін більша за третю. Вивести периметр трикутника або зрозуміле повідомлення про відмову. Реалізувати власний TriangleError, функції з анотаціями, журнал logging та таку поведінку: явно перевіряти введення через raise, а assert використати лише для інваріанта периметра; порівняти запуск із -O. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 24. Тренажерна зала
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури номер дня завершення абонемента та дня візиту від 1 до 365. Перевірити: день візиту не більший за день завершення. Вивести дозвіл відвідування та кількість днів до завершення або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури номер дня завершення абонемента та дня візиту від 1 до 365. Перевірити: день візиту не більший за день завершення. Вивести дозвіл відвідування та кількість днів до завершення або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток ExpiredPassError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури номер дня завершення абонемента та дня візиту від 1 до 365. Перевірити: день візиту не більший за день завершення. Вивести дозвіл відвідування та кількість днів до завершення або зрозуміле повідомлення про відмову. Реалізувати власний ExpiredPassError, функції з анотаціями, журнал logging та таку поведінку: обробити три візити й окремо журналювати прострочення та неправильний формат. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 25. Стрільба з лука
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три цілі результати пострілів. Перевірити: кожний результат належить 0..10. Вивести суму та середній бал серії або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три цілі результати пострілів. Перевірити: кожний результат належить 0..10. Вивести суму та середній бал серії або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток ShotError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три цілі результати пострілів. Перевірити: кожний результат належить 0..10. Вивести суму та середній бал серії або зрозуміле повідомлення про відмову. Реалізувати власний ShotError, функції з анотаціями, журнал logging та таку поведінку: збирати всі порушення серії в ExceptionGroup з номерами пострілів. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 26. Електромережа
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури напругу 1..250 В, струм 0..100 А та допустиму потужність 1..25000 Вт. Перевірити: скінченний добуток напруги й струму не більший за межу. Вивести потужність і запас до межі або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури напругу 1..250 В, струм 0..100 А та допустиму потужність 1..25000 Вт. Перевірити: скінченний добуток напруги й струму не більший за межу. Вивести потужність і запас до межі або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток OverloadError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури напругу 1..250 В, струм 0..100 А та допустиму потужність 1..25000 Вт. Перевірити: скінченний добуток напруги й струму не більший за межу. Вивести потужність і запас до межі або зрозуміле повідомлення про відмову. Реалізувати власний OverloadError, функції з анотаціями, журнал logging та таку поведінку: обгорнути помилку введення параметрів власним InputError через raise from, перевантаження обробляти окремо. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 27. Оформлення замовлення
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури суму замовлення 1..100000, оплату 0..100000 та код зони A або B. Перевірити: оплата покриває суму й доставку 50 для A або 100 для B. Вивести підсумковий чек і решту або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури суму замовлення 1..100000, оплату 0..100000 та код зони A або B. Перевірити: оплата покриває суму й доставку 50 для A або 100 для B. Вивести підсумковий чек і решту або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток CheckoutError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури суму замовлення 1..100000, оплату 0..100000 та код зони A або B. Перевірити: оплата покриває суму й доставку 50 для A або 100 для B. Вивести підсумковий чек і решту або зрозуміле повідомлення про відмову. Реалізувати власний CheckoutError, функції з анотаціями, журнал logging та таку поведінку: мати окремі PaymentError і DeliveryError; зберігати причину технічного перетворення через raise from. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 28. Прокат велосипедів
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури ознаку зайнятості 0 або 1 та планову й фактичну тривалість 1..24 години. Перевірити: видавати можна тільки вільний велосипед. Вивести вартість 40 за фактичну годину та ознаку пізнього повернення або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури ознаку зайнятості 0 або 1 та планову й фактичну тривалість 1..24 години. Перевірити: видавати можна тільки вільний велосипед. Вивести вартість 40 за фактичну годину та ознаку пізнього повернення або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток BikeBusyError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури ознаку зайнятості 0 або 1 та планову й фактичну тривалість 1..24 години. Перевірити: видавати можна тільки вільний велосипед. Вивести вартість 40 за фактичну годину та ознаку пізнього повернення або зрозуміле повідомлення про відмову. Реалізувати власний BikeBusyError, функції з анотаціями, журнал logging та таку поведінку: у finally друкувати статус спроби; пізнє повернення журналювати як WARNING, зайнятість як відмову. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 29. Холодильна камера
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три скінченні температури від -50 до 30 градусів. Перевірити: робочий навчальний діапазон від 2 до 8 включно. Вивести середню температуру лише прийнятої серії або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три скінченні температури від -50 до 30 градусів. Перевірити: робочий навчальний діапазон від 2 до 8 включно. Вивести середню температуру лише прийнятої серії або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток TemperatureError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три скінченні температури від -50 до 30 градусів. Перевірити: робочий навчальний діапазон від 2 до 8 включно. Вивести середню температуру лише прийнятої серії або зрозуміле повідомлення про відмову. Реалізувати власний TemperatureError, функції з анотаціями, журнал logging та таку поведінку: попереджати WARNING біля меж: 2..3 та 7..8; усі виходи за 2..8 зібрати в ExceptionGroup. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Варіант 30. Лотерейний квиток
1. Початковий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три цілі числа. Перевірити: числа різні й належать 1..10. Вивести кількість збігів із виграшними числами 2, 5, 8 або зрозуміле повідомлення про відмову. Використати функції з анотаціями; перехопити очікувані помилки перетворення; перевірити нормальний і граничний випадки.
2. Базовий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три цілі числа. Перевірити: числа різні й належать 1..10. Вивести кількість збігів із виграшними числами 2, 5, 8 або зрозуміле повідомлення про відмову. Реалізувати функції з анотаціями та власний виняток TicketError для предметної відмови. Зберігати успіхи й відмови через іменований логер у UTF-8-файлі; після відмови стан не змінювати.
3. Високий рівень. Створити консольну програму Python 3.14, що читає з клавіатури три цілі числа. Перевірити: числа різні й належать 1..10. Вивести кількість збігів із виграшними числами 2, 5, 8 або зрозуміле повідомлення про відмову. Реалізувати власний TicketError, функції з анотаціями, журнал logging та таку поведінку: перевірити діапазони й повтори до підрахунку; зберегти у журналі лише статус квитка й кількість збігів. Показати в налагоджувачі граничний випадок і подати щонайменше п’ять перевірок, зокрема відмову; успішні й відхилені операції розрізняти.
Порядок виконання та захисту роботи
- Запишіть контракт входу й виходу, формули, діапазони та типи очікуваних помилок. Визначте, яка відмова допускає повтор.
- Реалізуйте функції з анотаціями та короткими блоками
try. Відокремте повідомлення користувача від діагностичного журналу. - Перевірте нормальний випадок, кожну межу, неправильний формат, кожний власний виняток і повтор після відмови. Покажіть, що відхилена операція не змінила стан. Занесіть очікувані й фактичні результати в таблицю, додайте щонайменше п’ять наборів даних.
- Поставте звичайну й умовну точки зупинки. Збережіть кадр із локальними значеннями та перевірте одну формулу в Evaluate Expression. Повторіть одну перевірку засобами
pdb. - Для задачі з інваріантом порівняйте запуск із
-Oта без нього: перевірка введення має працювати в обох випадках. Для групи помилок продемонструйте щонайменше дві незалежні відмови. - Збережіть код, README з командою запуску, таблицю перевірок та короткий опис знайденої логічної помилки в локальному Git-репозиторії. Не додавайте
.venv,__pycache__та журнали з особистими даними. GitHub необов’язковий. - На захисті поясніть порядок
except, причину уraise from, призначенняfinally, рівні журналу та результат граничного тесту.