7.7 KiB
id, title, challengeType, forumTopicId, dashedName
| id | title | challengeType | forumTopicId | dashedName |
|---|---|---|---|---|
| 5e44414f903586ffb414c950 | Калькулятор вірогідностей | 10 | 462364 | probability-calculator |
--description--
Ви будете працювати над цим проєктом з нашим стартовим кодом Replit.
- Почніть з імпорту проєкту на Replit.
- Потім ви побачите вікно
.replit. - Оберіть
Use run commandта натисніть кнопкуDone.
--instructions--
Уявімо, що у капелюсі лежить 5 синіх, 4 червоні та 2 зелені кульки. Яка ймовірність того, що з 4 кульок, які ви витягнете, принаймні 1 буде червоною та 2 зеленими? І хоча можливо прорахувати вірогідність за допомогою вищої математики, легше буде написати програму для виконання великої кількості експериментів для оцінки приблизної вірогідності.
У цьому проєкті напишіть програму, яка визначатиме вірогідність випадкового діставання певних кульок із капелюха.
Спершу створіть клас Hat в prob_calculator.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 червоні кульки та одну зелену, коли витягаєте п'ять кульок з капелюха, де лежить шість чорних, чотири червоні та три зелені кульки. Для цього вам треба виконати N експериментів, порахувати скільки M разів ви можете витягти принаймні дві червоні кульки та одну зелену кульку та вирахувати вірогідність як M/N. Кожен експеримент складається з капелюха (з певними кульками), витягування декількох кульок та перевірки, чи ви витягли необхідні кульки.
Ось так ви можете викликати функцію experiment, базуючись на прикладі зверху з 2000 експериментами:
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 запуститься.
Шаблонний код містить інструкції import для модулів copy та random. Спробуйте використати їх у своєму проєкті.
Тестування
Модульні тести для цього проєкту знаходяться в test_module.py. Ми імпортували тести з test_module.py до main.py для вашої зручності. Тести запустяться автоматично, коли ви натиснете на кнопку «run».
Надсилання
Скопіюйте URL-адресу свого проєкту та відправте її до freeCodeCamp.
--hints--
Проєкт повинен правильно вираховувати ймовірність та пройти всі тести.
--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.
*/