ЛР40. Фінальна інтеграція у Python і перевірка перенесення в C++
Коротко про роботу
Файл містить записи name quantity price discount. Потрібно побудувати перевірений конвеєр обробки даних і звіт. Варіант визначає STUDENT_X.
Відкрити робочий зошит Як виконувати лабораторні
1. Умова
Файл містить записи name quantity price discount. Потрібно побудувати перевірений конвеєр обробки даних і звіт.
Усі обчислення виконуйте з даними свого STUDENT_X. Значення варіанта друкує перша комірка зошита.
2. Що треба знати
Робота виконується після Л1–Л15. Потрібні поняття:
- повний маршрут Python
- файли і розбір
- функції, тести та винятки
- модулі й перенесення на C++
Межа матеріалу
Використовуйте поняття, вивчені до Л1–Л15. Не копіюйте архітектуру попереднього мініпроєкту C++ механічно. Оберіть структуру Python відповідно до цієї умови.
3. Варіант, вхідні дані та результат
У зошиті заповніть STUDENT_NAME, STUDENT_GROUP і STUDENT_X від 1 до 30.
Вхідні дані
| Поле | Зміст |
|---|---|
input_file |
набір даних варіанта |
accepted_example |
коректний рядок для відкритого тесту |
invalid_value_example |
рядок із недопустимим значенням |
invalid_format_example |
рядок із помилкою формату |
probe_quantity |
quantity для міжмовного контрольного прикладу |
probe_price |
price для контрольного прикладу |
probe_discount |
відсоток discount для контрольного прикладу |
Поля результату
| Поле | Зміст |
|---|---|
accepted_count |
прийняті записи |
rejected_count |
відхилені записи |
total_value |
сума чистих вартостей |
average_value |
середня чиста вартість прийнятих записів |
top_name |
запис із найбільшою чистою вартістю |
core_value |
результат міжмовного контрольного виклику net_value |
Назви полів результату не змінюйте.
4. Терміни і правила
Терміни
- розбір — перетворення текстового рядка на структурований запис.
- валідація — перевірка допустимості значень запису.
- чиста функція — функція, результат якої визначається лише аргументами та яка не змінює зовнішній стан.
- перенесення перевірки — повторення того самого контракту в іншій мові для порівняння результату.
Правила
- Кожний рядок претендує на формат
name quantity price discountз рівно чотирма полями. - Прийнятий запис має
quantity > 0,price >= 0та0 <= discount <= 50. - Вартість прийнятого запису визначається його кількістю, ціною та відсотковою знижкою.
total_value— сума цих вартостей,average_value— їх середнє. top_name— ім’я прийнятого запису з найбільшою вартістю.core_value— результат тієї самої чистої функції дляprobe_quantity,probe_price,probe_discount.
Артефакти інтеграційної роботи
Створіть pipeline.py, main.py, test_pipeline.py і net_value.cpp.
pipeline.pyмістить щонайменшеnet_value(quantity, price, discount),parse_record(line)таvalidate_record(record).main.pyчитає файл варіанта і формує підсумок.test_pipeline.pyмістить звичайний, граничний і помилковий тести.net_value.cppреалізує чисту версіюnet_valueмовою C++ для перевірки перенесення.
Для прийнятого запису використовуйте quantity * price * (1 - discount / 100). Для порожньої множини прийнятих записів задайте average_value = 0.0 і top_name = "". За однакової найбільшої вартості top_name належить першому запису у файлі.
5. Завдання
Завдання 1
У pipeline.py реалізуйте розбір, перевірку і net_value. У main.py обробіть файл та запишіть accepted_count, rejected_count, total_value, average_value і top_name.
Завдання 2
У test_pipeline.py додайте тести для правильного рядка accepted_example, помилки значення invalid_value_example та помилки формату invalid_format_example. Запустіть три тести й виведіть результат.
Завдання 3
У net_value.cpp реалізуйте ту саму функцію на C++. Запишіть результат у core_value і порівняйте його з Python.
6. Перевірка і здача
- Запустіть самоперевірку та виправте помилки.
- Перезапустіть ядро і виконайте роботу ще раз від початку.
- Збережіть
.ipynbі PDF з кодом та результатами.
Для роботи з файлами покажіть у зошиті назви створених файлів. Також залиште видимий фрагмент або результат, який підтверджує їхню роботу.
Назва PDF: LR40_Прізвище_Група_VNN.pdf.