11"""
2- Generalized nCr (combinations ) calculator for real numbers n and integer r .
2+ Generalized combinations (n choose r ) calculator for real total and integer choose .
33Wikipedia URL: https://en.wikipedia.org/wiki/Binomial_coefficient
44"""
55
66from math import factorial as math_factorial
77
88
9- def nCr ( n : float , r : int ) -> float :
9+ def combinations ( total : float , choose : int ) -> float :
1010 """
11- Compute the number of combinations (n choose r ) for real n and integer r
11+ Compute the number of combinations (total choose choose ) for real total and integer choose
1212 using the formula:
1313
14- nCr = n * (n -1) * (n-2) * ... * (n-r +1) / r !
14+ combinations = total * (total -1) * ... * (total-choose +1) / choose !
1515
1616 Parameters
1717 ----------
18- n : float
18+ total : float
1919 Total number of items. Can be any real number.
20- r : int
21- Number of items to choose . Must be a non-negative integer.
20+ choose : int
21+ Number of items to select . Must be a non-negative integer.
2222
2323 Returns
2424 -------
@@ -28,38 +28,38 @@ def nCr(n: float, r: int) -> float:
2828 Raises
2929 ------
3030 ValueError
31- If r is not an integer or r < 0
31+ If choose is not a non-negative integer.
3232
3333 Examples
3434 --------
35- >>> nCr (5, 2)
35+ >>> combinations (5, 2)
3636 10.0
37- >>> nCr (5.5, 2)
37+ >>> combinations (5.5, 2)
3838 12.375
39- >>> nCr (10, 0)
39+ >>> combinations (10, 0)
4040 1.0
41- >>> nCr (0, 0)
41+ >>> combinations (0, 0)
4242 1.0
43- >>> nCr (5, -1)
43+ >>> combinations (5, -1)
4444 Traceback (most recent call last):
4545 ...
46- ValueError: r must be a non-negative integer
47- >>> nCr (5, 2.5)
46+ ValueError: choose must be a non-negative integer
47+ >>> combinations (5, 2.5)
4848 Traceback (most recent call last):
4949 ...
50- ValueError: r must be a non-negative integer
50+ ValueError: choose must be a non-negative integer
5151 """
52- if not isinstance (r , int ) or r < 0 :
53- raise ValueError ("r must be a non-negative integer" )
52+ if not isinstance (choose , int ) or choose < 0 :
53+ raise ValueError ("choose must be a non-negative integer" )
5454
55- if r == 0 :
55+ if choose == 0 :
5656 return 1.0
5757
5858 numerator = 1.0
59- for i in range (r ):
60- numerator *= n - i
59+ for i in range (choose ):
60+ numerator *= total - i
6161
62- denominator = math_factorial (r )
62+ denominator = math_factorial (choose )
6363 return numerator / denominator
6464
6565
@@ -69,6 +69,6 @@ def nCr(n: float, r: int) -> float:
6969 doctest .testmod ()
7070
7171 # Example usage
72- n = float (input ("Enter n (real number): " ).strip () or 0 )
73- r = int (input ("Enter r (integer): " ).strip () or 0 )
74- print (f"nCr( { n } , { r } ) = { nCr ( n , r )} " )
72+ total_input = float (input ("Enter total (real number): " ).strip () or 0 )
73+ choose_input = int (input ("Enter choose (integer): " ).strip () or 0 )
74+ print (f"combinations( { total_input } , { choose_input } ) = { combinations ( total_input , choose_input )} " )
0 commit comments