mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-03-22 19:01:10 -04:00
108 lines
7.4 KiB
Markdown
108 lines
7.4 KiB
Markdown
---
|
||
id: 5e44413e903586ffb414c94e
|
||
title: Застосунок для ведення бюджету
|
||
challengeType: 10
|
||
forumTopicId: 462361
|
||
dashedName: budget-app
|
||
---
|
||
|
||
# --description--
|
||
|
||
Ви будете <a href="https://replit.com/github/freeCodeCamp/boilerplate-budget-app" target="_blank" rel="noopener noreferrer nofollow">працювати над цим проєктом з нашим стартовим кодом Replit</a>.
|
||
|
||
- Почніть з імпорту проєкту на Replit.
|
||
- Потім ви побачите вікно `.replit`.
|
||
- Оберіть `Use run command` та натисніть кнопку `Done`.
|
||
|
||
|
||
# --instructions--
|
||
|
||
Завершіть клас `Category` у `budget.py`. Він повинен опрацьовувати об’єкти, базуючись на різних категоріях (наприклад, *їжа*, *одяг* та *розваги*). Коли об’єкти створені, вони передаються до назви категорії. Клас повинен мати поле класу під назвою `ledger`, яке є списком. Клас також повинен містити наступні методи:
|
||
|
||
- Метод `deposit`, що приймає суму та опис. Якщо жодного опису не дано, то він автоматично стає порожнім рядком. Цей метод повинен додавати об’єкти до списку ledger у вигляді `{"amount": amount, "description": description}`.
|
||
- Метод `withdraw` схожий до методу `deposit`, але сума, яку він передає, повинна зберігатися у списку як від’ємне число. Якщо недостатньо коштів, то нічого додавати не потрібно. Цей метод повинен повертати `True`, якщо зняття дійсне, а в іншому випадку повертати `False`.
|
||
- Метод `get_balance`, що повертає поточний баланс категорії бюджету на основі депозитів і зняття.
|
||
- Метод `transfer`, що приймає суму або іншу бюджетну категорію як аргументи. Цей метод повинен додавати виведення суми та опис «Transfer to [Destination Budget Category]» (перенести до [категорія]). Потім він повинен додати депозит до іншої категорії, що містить суму та опис «Transfer from [Source Budget Category]» (перенести з [категорія]). Якщо недостатньо коштів, то нічого додавати не потрібно. Цей метод повинен повертати `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. Стовпчики у стовпчиковій діаграмі повинні бути створені із символу «o». Висота кожного стовпчика повинна бути округлена до найближчого 10. Горизонтальна лінія під стовпчиками повинна розташовуватись в двох пробілах від кінцевого стовпчика. Назва кожної категорії повинна бути написана вертикально під стовпчиком. Вгорі повинен бути заголовок «Percentage spent by category» (відсоток, витрачений у категорії).
|
||
|
||
Ця функція буде тестуватися чотирма категоріями.
|
||
|
||
Уважно розгляньте приклад виводу нижче і переконайтеся, що інтервал виводу повністю відповідає прикладу.
|
||
|
||
```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--
|
||
|
||
Проєкт повинен створити клас Category та пройти всі тести.
|
||
|
||
```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.
|
||
*/
|
||
```
|