Перейти до змісту

ЛР40. Фінальна інтеграція у Python і перевірка перенесення в C++

Коротко про роботу

Файл містить записи name quantity price discount. Потрібно побудувати перевірений конвеєр обробки даних і звіт. Варіант визначає STUDENT_X.

Відкрити робочий зошит Як виконувати лабораторні

1. Умова

Файл містить записи name quantity price discount. Потрібно побудувати перевірений конвеєр обробки даних і звіт.

Усі обчислення виконуйте з даними свого STUDENT_X. Значення варіанта друкує перша комірка зошита.

2. Що треба знати

Робота виконується після Л1–Л15. Потрібні поняття:

  1. повний маршрут Python
  2. файли і розбір
  3. функції, тести та винятки
  4. модулі й перенесення на 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. Терміни і правила

Терміни

  • розбір — перетворення текстового рядка на структурований запис.
  • валідація — перевірка допустимості значень запису.
  • чиста функція — функція, результат якої визначається лише аргументами та яка не змінює зовнішній стан.
  • перенесення перевірки — повторення того самого контракту в іншій мові для порівняння результату.

Правила

  1. Кожний рядок претендує на формат name quantity price discount з рівно чотирма полями.
  2. Прийнятий запис має quantity > 0, price >= 0 та 0 <= discount <= 50.
  3. Вартість прийнятого запису визначається його кількістю, ціною та відсотковою знижкою. total_value — сума цих вартостей, average_value — їх середнє.
  4. top_name — ім’я прийнятого запису з найбільшою вартістю. core_value — результат тієї самої чистої функції для probe_quantity, probe_price, probe_discount.

Артефакти інтеграційної роботи

Створіть pipeline.py, main.py, test_pipeline.py і net_value.cpp.

  1. pipeline.py містить щонайменше net_value(quantity, price, discount), parse_record(line) та validate_record(record).
  2. main.py читає файл варіанта і формує підсумок.
  3. test_pipeline.py містить звичайний, граничний і помилковий тести.
  4. 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. Перевірка і здача

  1. Запустіть самоперевірку та виправте помилки.
  2. Перезапустіть ядро і виконайте роботу ще раз від початку.
  3. Збережіть .ipynb і PDF з кодом та результатами.

Для роботи з файлами покажіть у зошиті назви створених файлів. Також залиште видимий фрагмент або результат, який підтверджує їхню роботу.

Назва PDF: LR40_Прізвище_Група_VNN.pdf.