reginafeles's picture
Update generators/classic/coins.py
46e21a6 verified
"""Генератор задач: бросание монеты"""
from core.base_generator import BaseTaskGenerator
from models.task import Task
from fractions import Fraction
from config import COMPLEXITY_CONFIG
from utils.coin_utils import CoinCombinations
import random
class CoinsGenerator(BaseTaskGenerator):
"""Генератор задач про бросание монеты"""
def generate(self) -> Task:
"""Генерация задачи"""
config = COMPLEXITY_CONFIG[self.complexity]
num_flips = random.randint(2, config['coin_flips'])
target_heads = random.randint(0, num_flips)
question = f"В случайном эксперименте симметричную монету бросают {num_flips} раза. Найдите вероятность того, что орел выпадет ровно {target_heads} раз."
favorable = CoinCombinations.binomial_coefficient(num_flips, target_heads)
total_outcomes = 2 ** num_flips
answer_fraction = Fraction(favorable, total_outcomes)
answer = round(float(answer_fraction), 2)
steps = [
f"1. Общее число исходов: 2^{num_flips} = {total_outcomes}",
f"2. Благоприятные исходы (выбор {target_heads} орлов из {num_flips}): C({num_flips},{target_heads}) = {favorable}",
f"3. Вероятность = {favorable}/{total_outcomes} = {answer_fraction}"
]
return Task(
type='coins',
question=question,
answer=answer,
answer_fraction=str(answer_fraction),
solution=f"Вероятность = {favorable}/{total_outcomes} = {answer_fraction}",
steps=steps,
complexity=self.complexity
)
def get_type(self) -> str:
return 'coins'