TheAlgorithms-Python
68 строк · 1.8 Кб
1"""
2Factorial of a positive integer -- https://en.wikipedia.org/wiki/Factorial
3"""
4
5
6def factorial(number: int) -> int:
7"""
8Calculate the factorial of specified number (n!).
9
10>>> import math
11>>> all(factorial(i) == math.factorial(i) for i in range(20))
12True
13>>> factorial(0.1)
14Traceback (most recent call last):
15...
16ValueError: factorial() only accepts integral values
17>>> factorial(-1)
18Traceback (most recent call last):
19...
20ValueError: factorial() not defined for negative values
21>>> factorial(1)
221
23>>> factorial(6)
24720
25>>> factorial(0)
261
27"""
28if number != int(number):
29raise ValueError("factorial() only accepts integral values")
30if number < 0:
31raise ValueError("factorial() not defined for negative values")
32value = 1
33for i in range(1, number + 1):
34value *= i
35return value
36
37
38def factorial_recursive(n: int) -> int:
39"""
40Calculate the factorial of a positive integer
41https://en.wikipedia.org/wiki/Factorial
42
43>>> import math
44>>> all(factorial(i) == math.factorial(i) for i in range(20))
45True
46>>> factorial(0.1)
47Traceback (most recent call last):
48...
49ValueError: factorial() only accepts integral values
50>>> factorial(-1)
51Traceback (most recent call last):
52...
53ValueError: factorial() not defined for negative values
54"""
55if not isinstance(n, int):
56raise ValueError("factorial() only accepts integral values")
57if n < 0:
58raise ValueError("factorial() not defined for negative values")
59return 1 if n in {0, 1} else n * factorial(n - 1)
60
61
62if __name__ == "__main__":
63import doctest
64
65doctest.testmod()
66
67n = int(input("Enter a positive integer: ").strip() or 0)
68print(f"factorial{n} is {factorial(n)}")
69