Source code for simplestatistics.statistics.factorial

"""
Implements factorial() function, and helper function obtain_factorial().
"""

def obtain_factorial(x):
    """
    Helper function obtain_factorial() for the factorial() function.
    Given value x, it returns the factorial of that value.
    """
    product = 1
    for ii in list(range(x)):
        product = product * (ii + 1)

    return(product)

[docs]def factorial(x): """ The factorial_ (denoted :math:`n!`) is the product of all positive integers less than or equal to a positive integer (:math:`n`). .. _factorial: https://en.wikipedia.org/wiki/Factorial Equation: .. math:: n! = \\prod_{k=1}^n k Args: x: A numeric built-in object, or a list of numeric built-in objects for :math:`n` Returns: A numerical (int) object. Examples: >>> factorial(5) 120 >>> factorial(1) 1 >>> factorial(20) 2432902008176640000 >>> factorial([1, 5, 20]) [1, 120, 2432902008176640000] >>> factorial(-2) Traceback (most recent call last): ... ValueError: factorial() expects a positive integer. >>> factorial(4.5) Traceback (most recent call last): ... TypeError: factorial() expects a positive integer or list of positive integers. >>> factorial([2, 3, 'a']) Traceback (most recent call last): ... ValueError: Perhaps you provided a list that contains non-integers. """ if type(x) is int: if x < 0: raise ValueError('factorial() expects a positive integer.') return(obtain_factorial(x)) elif type(x) is list: try: products = [] for element in x: products.append(obtain_factorial(element)) return(products) except: raise ValueError('Perhaps you provided a list that contains non-integers.') else: raise TypeError('factorial() expects a positive integer or list of positive integers.')