7.2 KiB
id, title, challengeType, forumTopicId, dashedName
| id | title | challengeType | forumTopicId | dashedName |
|---|---|---|---|---|
| 5e44413e903586ffb414c94e | Додаток для ведення бюджету | 10 | 462361 | budget-app |
--description--
Ви будете працювати над цим проєктом з нашим стартовим кодом Replit.
--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 символів.
- Рядок, що показує загальну категорію.
Ось приклад виводу:
*************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" (відсоток, витрачений у категорії).
Ця функція буде тестуватися чотирма категоріями.
Уважно розгляньте приклад виводу нижче і переконайтеся, що інтервал виводу повністю відповідає прикладу.
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 та пройти тестування.
--solutions--
/**
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.
*/