TheAlgorithms-Python

Форк
0
68 строк · 1.8 Кб
1
"""
2
Factorial of a positive integer -- https://en.wikipedia.org/wiki/Factorial
3
"""
4

5

6
def factorial(number: int) -> int:
7
    """
8
    Calculate the factorial of specified number (n!).
9

10
    >>> import math
11
    >>> all(factorial(i) == math.factorial(i) for i in range(20))
12
    True
13
    >>> factorial(0.1)
14
    Traceback (most recent call last):
15
        ...
16
    ValueError: factorial() only accepts integral values
17
    >>> factorial(-1)
18
    Traceback (most recent call last):
19
        ...
20
    ValueError: factorial() not defined for negative values
21
    >>> factorial(1)
22
    1
23
    >>> factorial(6)
24
    720
25
    >>> factorial(0)
26
    1
27
    """
28
    if number != int(number):
29
        raise ValueError("factorial() only accepts integral values")
30
    if number < 0:
31
        raise ValueError("factorial() not defined for negative values")
32
    value = 1
33
    for i in range(1, number + 1):
34
        value *= i
35
    return value
36

37

38
def factorial_recursive(n: int) -> int:
39
    """
40
    Calculate the factorial of a positive integer
41
    https://en.wikipedia.org/wiki/Factorial
42

43
    >>> import math
44
    >>> all(factorial(i) == math.factorial(i) for i in range(20))
45
    True
46
    >>> factorial(0.1)
47
    Traceback (most recent call last):
48
        ...
49
    ValueError: factorial() only accepts integral values
50
    >>> factorial(-1)
51
    Traceback (most recent call last):
52
        ...
53
    ValueError: factorial() not defined for negative values
54
    """
55
    if not isinstance(n, int):
56
        raise ValueError("factorial() only accepts integral values")
57
    if n < 0:
58
        raise ValueError("factorial() not defined for negative values")
59
    return 1 if n in {0, 1} else n * factorial(n - 1)
60

61

62
if __name__ == "__main__":
63
    import doctest
64

65
    doctest.testmod()
66

67
    n = int(input("Enter a positive integer: ").strip() or 0)
68
    print(f"factorial{n} is {factorial(n)}")
69

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.