Add odds util functions
This commit is contained in:
1 parent
d8c4a6f34d
commit
1ff14703c8
1 file changed
+65
@@ -0,0 +1,65 @@
|
|||||||
|
"""
|
||||||
|
util/odds.py
|
||||||
|
|
||||||
|
Calculate the odds of winning a lottery game
|
||||||
|
"""
|
||||||
|
|
||||||
|
from math import comb
|
||||||
|
|
||||||
|
|
||||||
|
def calculate_odds(pool_size: int, draw_count: int) -> int:
|
||||||
|
"""
|
||||||
|
Calculate the total number of possible combinations in a set of numbers with a specific draw count.
|
||||||
|
|
||||||
|
:param pool_size: Total count of numbers in the pool
|
||||||
|
:param draw_count: The count of numbers to draw from the pool
|
||||||
|
:return: The total number of possible combinations
|
||||||
|
|
||||||
|
Example:
|
||||||
|
If a lottery game has a main ball pool of 49 numbers from which 5 numbers are drawn and a pool of
|
||||||
|
18 numbers from which 1 number is drawn (game ball), calculate the odds of winning that game.
|
||||||
|
|
||||||
|
>>> calculate_odds(pool_size=49, draw_count=5)
|
||||||
|
1906884
|
||||||
|
>>> calculate_odds(pool_size=18, draw_count=1)
|
||||||
|
18
|
||||||
|
"""
|
||||||
|
|
||||||
|
if draw_count < 0 or draw_count > pool_size:
|
||||||
|
raise ValueError('Integer values must be positive and draw counts must be less than pool size.')
|
||||||
|
total_combinations = comb(pool_size, draw_count)
|
||||||
|
return total_combinations
|
||||||
|
|
||||||
|
|
||||||
|
def get_odds_of_winning(
|
||||||
|
main_ball_draw_pool: int,
|
||||||
|
main_ball_draw_count: int,
|
||||||
|
game_ball_draw_pool: int,
|
||||||
|
game_ball_draw_count: int
|
||||||
|
) -> str:
|
||||||
|
"""
|
||||||
|
Calculate the odds of winning a specific lottery game with one draw
|
||||||
|
|
||||||
|
:param main_ball_draw_pool: Total count of numbers in the main ball pool
|
||||||
|
:param main_ball_draw_count: The count of numbers to draw from the main ball pool
|
||||||
|
:param game_ball_draw_pool: Total count of numbers in the game ball pool
|
||||||
|
:param game_ball_draw_count: The count of numbers to draw from the game ball pool
|
||||||
|
|
||||||
|
:return: The odds of winning a specific lottery game with one draw
|
||||||
|
|
||||||
|
Example:
|
||||||
|
To calculate the odds of winning a lottery game with 5 numbers drawn from a main ball pool of 49 and
|
||||||
|
1 number drawn from a game ball pool of 19 numbers.
|
||||||
|
|
||||||
|
>>> get_odds_of_winning(main_ball_draw_pool=49, main_ball_draw_count=5, game_ball_draw_pool=18, game_ball_draw_count=1)
|
||||||
|
'The odds of winning are 1 in 34,323,912'
|
||||||
|
"""
|
||||||
|
|
||||||
|
if (main_ball_draw_count < 0 or main_ball_draw_count > main_ball_draw_pool or
|
||||||
|
game_ball_draw_count < 0 or game_ball_draw_count > game_ball_draw_pool):
|
||||||
|
raise ValueError('Integer values must be positive and draw counts must be less than pool size.')
|
||||||
|
|
||||||
|
main_ball_odds = calculate_odds(main_ball_draw_pool, main_ball_draw_count)
|
||||||
|
game_ball_odds = calculate_odds(game_ball_draw_pool, game_ball_draw_count)
|
||||||
|
|
||||||
|
return f"The odds of winning are 1 in {main_ball_odds * game_ball_odds:,}"
|
||||||
Reference in new issue
Block a user