Files
2023-03-30 20:56:38 -07:00

108 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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.
*/
```