Files

93 lines
8.0 KiB
Markdown
Raw Permalink Normal View History

---
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.
*/
```