109 lines
8.0 KiB
Markdown
109 lines
8.0 KiB
Markdown
![]() |
---
|
|||
|
id: 5e44413e903586ffb414c94e
|
|||
|
title: Додаток для ведення бюджету
|
|||
|
challengeType: 10
|
|||
|
forumTopicId: 462361
|
|||
|
dashedName: budget-app
|
|||
|
---
|
|||
|
|
|||
|
# --description--
|
|||
|
|
|||
|
Ви маєте [виконати цей проєкт за допомогою нашого стартового коду Replit](https://replit.com/github/freeCodeCamp/boilerplate-budget-app).
|
|||
|
|
|||
|
Ми й досі в процесі розробки інтерактивної складової навчального курсу Python. Наразі можете ознайомитись із наступними відео на YouTube каналі freeCodeCamp.org. У них ви знайдете все необхідне для завершення цього проєкту:
|
|||
|
|
|||
|
- [Python for Everybody Video Course](https://www.freecodecamp.org/news/python-for-everybody/) (14 годин)
|
|||
|
|
|||
|
- [Learn Python Video Course](https://www.freecodecamp.org/news/learn-python-video-course/) (10 години)
|
|||
|
|
|||
|
# --instructions--
|
|||
|
|
|||
|
Зробіть клас `Category` в `budget.py`. Реклама повинна використовувати об'єкти на основі різних бюджетних категорій, а саме *їжа*, *одяг*, та *розваги*. Коли об'єкти створені, вони передаються в назву категорії. Клас повинен мати приклад змінної, що називається `ledger`, яка є за списком. Клас також повинен містити наступні методи:
|
|||
|
|
|||
|
- Метод `deposit`, що приймає суму та опис. Якщо жодного опису не дано, то воно автоматично переходить до порожнього рядка. Метод повинен додати об'єкт до списку реєстрацій у вигляді `{"amount": amount, "description": description}`.
|
|||
|
- Метод `withdraw`, який схожий до методу `deposit`, але кількість, яку він передає, повинна зберігатися у реєстраційному списку як від'ємне число. Якщо недостатньо коштів, до реєстраційного списку додавати нічого не потрібно. Цей метод повинен переходити у `True`, якщо виведення займе місце, і в іншому випадку `False`.
|
|||
|
- Метод `get_balance`, що повертає поточний баланс категорії бюджету на основі депозитів і зняття.
|
|||
|
- Метод `transfer`, що приймає суму або іншу бюджетну категорію в якості аргументів. Метод повинен додати виведення суми та опис "Перенести до [Категорії Призначення Бюджету]". Метод повинен додати депозит до іншої бюджетної категорії, що містить суму та опис "Передача з [Категорії Джерела Бюджету]". Якщо недостатньо грошей, до реєстраційного списку додавати нічого не потрібно. Цей метод повинен переходити в `True`, якщо виведення займе місце, і в іншому випадку `False`.
|
|||
|
- Метод `check_funds`, що приймає суму в якості аргументу. Це переходить у `False`, якщо сума більша ніж баланс бюджетної категорії і повертає `True` в іншому випадку. Цей метод слід використовувати як метод `withdraw`, так і метод `transfer`.
|
|||
|
|
|||
|
Якщо бюджетний об'єкт надрукований, він повинен відображатися:
|
|||
|
|
|||
|
- Рядок заголовка із 30 символів, де є назва категорії знаходиться у рядку символів `*`.
|
|||
|
- Список елементів у реєстраційній базі. Кожен рядок повинен показувати опис і суму. Перші 23 символи опису повинні відображатися, а далі вже сума. Суму слід вирівняти з правого боку, помістити два десяткові знаки, та відобразити максимум 7 символів.
|
|||
|
- Рядок, що показує загальну категорію.
|
|||
|
|
|||
|
Ось приклад результату:
|
|||
|
|
|||
|
```bash
|
|||
|
*************Food*************
|
|||
|
initial deposit 1000.00
|
|||
|
groceries -10.15
|
|||
|
restaurant and more foo -15.89
|
|||
|
Transfer to Clothing -50.00
|
|||
|
Total: 923.96
|
|||
|
```
|
|||
|
|
|||
|
Окрім класу `Category`, створіть функцію (за межами класу) під назвою `create_spend_chart`, яка приймає список категорій в якості аргументу. Вона повинна повертати рядок зі стовпчиковою діаграмою.
|
|||
|
|
|||
|
Графік повинен показувати кількість відсотків, витрачених в кожній категорії, що передається до функції. Відсоток витраченого повинен бути розрахований лише за рахунок зняття, але не з депозитів. Внизу лівої частини графіку повинні бути мітки 0 - 100. "Стовпчики" у стовпчиковій діаграмі повинні бути створені із символу "0". Висота кожного стовпчика повинна бути округлена до найближчого 10. Горизонтальна лінія під стовпчиками повинна бути на двох пробілах біля кінцевої панелі. Кожна назва категорії повинна бути написана вертикально нижче стовпчика. Вгорі повинен бути заголовок, де вказано "Відсоток, витрачений категорією".
|
|||
|
|
|||
|
Ця функція буде тестуватися з чотирма категоріями.
|
|||
|
|
|||
|
Подивіться на приклад виходу нижче дуже близько і переконайтеся, що інтервал результатів повністю відповідає прикладу.
|
|||
|
|
|||
|
```bash
|
|||
|
Percentage spent by category
|
|||
|
100|
|
|||
|
90|
|
|||
|
80|
|
|||
|
70|
|
|||
|
60| o
|
|||
|
50| o
|
|||
|
40| o
|
|||
|
30| o
|
|||
|
20| o o
|
|||
|
10| o o o
|
|||
|
0| o o o
|
|||
|
----------
|
|||
|
F C A
|
|||
|
o l u
|
|||
|
o o t
|
|||
|
d t o
|
|||
|
h
|
|||
|
i
|
|||
|
n
|
|||
|
g
|
|||
|
```
|
|||
|
|
|||
|
Розділи з тестами для цього проєкту є в `test_module.py`.
|
|||
|
|
|||
|
## Розробка
|
|||
|
|
|||
|
Запишіть свій код в `budget.py`. Для розробки, ви можете використати `main.py` для перевірки вашого класу `Category`. Натисніть клавішу "run" і `main.py` запуститься.
|
|||
|
|
|||
|
## Тестування
|
|||
|
|
|||
|
Ми імпортували тести з `test_module.py` до `main.py` для вашої зручності. Тести запустяться автоматично кожен раз, коли ви натиснете клавішу "run".
|
|||
|
|
|||
|
## Надсилання
|
|||
|
|
|||
|
Скопіюйте URL-адресу вашого проєкту і відправте його до freeCodeCamp.
|
|||
|
|
|||
|
# --hints--
|
|||
|
|
|||
|
Ви повинні створити клас "Категорія" і пройти всі тести.
|
|||
|
|
|||
|
```js
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
# --solutions--
|
|||
|
|
|||
|
```js
|
|||
|
/**
|
|||
|
Backend challenges don't need solutions,
|
|||
|
because they would need to be tested against a full working project.
|
|||
|
Please check our contributing guidelines to learn more.
|
|||
|
*/
|
|||
|
```
|