93 lines
8.0 KiB
Markdown
93 lines
8.0 KiB
Markdown
![]() |
---
|
|||
|
id: 5e44414f903586ffb414c950
|
|||
|
title: Калькулятор вірогідностей
|
|||
|
challengeType: 10
|
|||
|
forumTopicId: 462364
|
|||
|
dashedName: probability-calculator
|
|||
|
---
|
|||
|
|
|||
|
# --description--
|
|||
|
|
|||
|
Ви маєте [виконати цей проєкт за допомогою нашого стартового коду Replit](https://replit.com/github/freeCodeCamp/boilerplate-probability-calculator).
|
|||
|
|
|||
|
Ми й досі в процесі розробки інтерактивної складової навчального курсу 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--
|
|||
|
|
|||
|
Уявімо, що у капелюсі лежить 5 синіх кульок, 4 червоні та 2 зелені кульки. Яка ймовірність того, що з 4 кульок, які ви витягнете, принаймні 1 буде червоною та 2 зеленими? І хоча можливо прорахувати вірогідність за допомогою вищої математики, легше буде написати програму для виконання великої кількості експериментів для оцінки приблизної вірогідності.
|
|||
|
|
|||
|
Для цього проєкту, напишіть програму, яка визначатиме вірогідність випадкового діставання певних кульок із капелюха.
|
|||
|
|
|||
|
Спершу створіть клас `Hat` в `prob_calculator.py`. Клас має взяти змінну кількість аргументів, яка вточнюватиме кількість кульок усіх кольорів із капелюха. Наприклад, клас об'єкту можна створити такими способами:
|
|||
|
|
|||
|
```py
|
|||
|
hat1 = Hat(yellow=3, blue=2, green=6)
|
|||
|
hat2 = Hat(red=5, orange=4)
|
|||
|
hat3 = Hat(red=5, orange=4, black=1, blue=0, pink=2, striped=9)
|
|||
|
```
|
|||
|
|
|||
|
Капелюх завжди створюється з принаймні однією кулькою. Аргументи, які передаються в об'єкт капелюха, під час створення мають конвертуватися в приклад змінної `contents`. `contents` має бути списком рядків з елементами для кожної кульки у капелюсі. Кожний елемент списку має бути назвою кольору, яка позначатиме кожну кульку певного кольору. Наприклад, якщо ваш капелюх `{"red": 2, "blue": 1}`, `contents` має бути `["red", "red", "blue"]`.
|
|||
|
|
|||
|
Клас `Hat` повинен мати метод `draw`, який приймає аргумент з позначенням кількості кульок, які можна витягти з капелюха. Цей метод має випадково витягати кульки з `contents` та повертати ці кульки списком рядків. Кульки не повинні повертатися до капелюха після того, як їх витягли (як в експерименті з урною без заміни). Якщо кількість кульок, яку треба витягти, перевищує доступну кількість, поверніть усі кульки.
|
|||
|
|
|||
|
Потім створіть функцію `experiment` в `prob_calculator.py` (не в класі `Hat`). Ця функція повинна приймати наступні аргументи:
|
|||
|
|
|||
|
- `hat`: об'єкт капелюха з кульками, який має скопійований у функцію.
|
|||
|
- `expected_balls`: об'єкт, який вказує на точну кількість кульок, котру треба вийняти з капелюха для експерименту. Наприклад, щоб визначити вірогідність того, що ви витягнете 2 сині кульки та 1 червону кульку з капелюха, встановіть `expected_balls` на `{"blue":2, "red":1}`.
|
|||
|
- `num_balls_drawn`: кількість кульок, які треба витягти з капелюха в кожному експерименті.
|
|||
|
- `num_experiments`: кількість експериментів, які треба провести. (Чим більше експериментів було проведено, тим точнішою буде приблизна вірогідність.)
|
|||
|
|
|||
|
`experiment` функція має повертати вірогідність.
|
|||
|
|
|||
|
Допустимо, ви хочете визначити вірогідність витягти щонайменше 2 червоні кульки та 1 зелену кульку, коли ви витягаєте 5 кульок з капелюха, де лежить 6 чорних, 4 червоні та 3 зелені кульки. Для цього нам треба виконати `N` експериментів, порахуйте скільки разів `M` ми можемо витягти принаймні 2 червоні кульки та 1 зелену кульку. Вирахуйте вірогідність як `M/N`. Кожен експеримент складається з: капелюха (з певними кульками), витягування певної кількості кульок та перевірка, чи ми витягли необхідні кульки.
|
|||
|
|
|||
|
Ось так ви можете викликати функцію `experiment` з 2000 експериментів (з прикладу зверху):
|
|||
|
|
|||
|
```py
|
|||
|
hat = Hat(black=6, red=4, green=3)
|
|||
|
probability = experiment(hat=hat,
|
|||
|
expected_balls={"red":2,"green":1},
|
|||
|
num_balls_drawn=5,
|
|||
|
num_experiments=2000)
|
|||
|
```
|
|||
|
|
|||
|
Оскільки все базується на випадкових витяганнях, то вірогідність буде злегка відрізнятися з кожним новим запуском коду.
|
|||
|
|
|||
|
*Підказка: спробуйте використати вже імпортовані модулі зверху `prob_calculator.py`. Не ініціалізуйте випадкове початкове значення в `prob_calculator.py`.*
|
|||
|
|
|||
|
## Розробка
|
|||
|
|
|||
|
Запишіть свій код в `prob_calculator.py`. Для розробки, ви можете використати `main.py` для перевірки вашого коду. Натисніть кнопку "run" і `main.py` запуститься.
|
|||
|
|
|||
|
Boilerplate містить команду `import` для `copy` та `random` модулів. Спробуйте використати їх у своєму проєкті.
|
|||
|
|
|||
|
## Тестування
|
|||
|
|
|||
|
Розділи з тестами для цього проєкту знаходяться в `test_module.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.
|
|||
|
*/
|
|||
|
```
|