При выполнении вероятностных расчетов в Python часто бывает полезно смоделировать эксперимент, чтобы сравнить его с вашими попытками точного расчета. Наивная версия будет:
import random
def simulate(n,k,prob = 0.5,trials = 10000):
"""estimates the probability of seeing exactly k heads in n rolls"""
successes = 0
for i in range(trials):
trial = ''.join('H' if random.random() < prob else 'T' for _ in range(n))
if trial.count('H') == k: successes += 1
return successes/trials
Например, мой первый прогон simulate(30,10,1/3)
оценивается как 0.1525
, что соответствует ответу Юлиуса Вайнора.