for more information about the binomial distribution https en wikipedia orgwikibinomialdistribution from math import factorial def binomialdistributionsuccesses int trials int prob float float if successes trials raise valueerrorsuccesses must be lower or equal to trials if trials 0 or successes 0 raise valueerrorthe function is defined for nonnegative integers if not isinstancesuccesses int or not isinstancetrials int raise valueerrorthe function is defined for nonnegative integers if not 0 prob 1 raise valueerrorprob has to be in range of 1 0 probability probsuccesses 1 prob trials successes calculate the binomial coefficient n k nk coefficient floatfactorialtrials coefficient factorialsuccesses factorialtrials successes return probability coefficient if name main from doctest import testmod testmod printprobability of 2 successes out of 4 trails printwith probability of 0 75 is end printbinomialdistribution2 4 0 75 return probability of k successes out of n tries with p probability for one success the function uses the factorial function in order to calculate the binomial coefficient binomial_distribution 3 5 0 7 0 30870000000000003 binomial_distribution 2 4 0 5 0 375 successes must be lower or equal to trials calculate the binomial coefficient n k n k
from math import factorial


def binomial_distribution(successes: int, trials: int, prob: float) -> float:
    
    if successes > trials:
        raise ValueError()
    if trials < 0 or successes < 0:
        raise ValueError("the function is defined for non-negative integers")
    if not isinstance(successes, int) or not isinstance(trials, int):
        raise ValueError("the function is defined for non-negative integers")
    if not 0 < prob < 1:
        raise ValueError("prob has to be in range of 1 - 0")
    probability = (prob**successes) * ((1 - prob) ** (trials - successes))
    
    coefficient = float(factorial(trials))
    coefficient /= factorial(successes) * factorial(trials - successes)
    return probability * coefficient


if __name__ == "__main__":
    from doctest import testmod

    testmod()
    print("Probability of 2 successes out of 4 trails")
    print("with probability of 0.75 is:", end=" ")
    print(binomial_distribution(2, 4, 0.75))