From f9a6cd540d5112ba8196e70d5d680b38c383cbf6 Mon Sep 17 00:00:00 2001 From: Daniel Heras Quesada Date: Tue, 18 Nov 2025 17:47:10 +0100 Subject: [PATCH] feat: probability exercises --- src/modules/probability.py | 43 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/modules/probability.py b/src/modules/probability.py index 08f0142..f9d9aac 100644 --- a/src/modules/probability.py +++ b/src/modules/probability.py @@ -56,8 +56,49 @@ class BetaDistribution: def calc_region(init_probability, end_probability, success_count, failure_count): return BetaDistribution.calc(end_probability, success_count, failure_count) - BetaDistribution.calc(init_probability, success_count, failure_count) +p_r = 0.3 +p_u = 0.4 class Exercises: + @staticmethod + def one(): + # 30% change of rain and 40% change your umbrella order will arrive. P(R AND U) + return p_r * p_u + + @staticmethod + def two(): + # Same Ps as previous. P(!R OR U) + # RU !RU !R!U R!U + return (1 - p_r) + p_u - ((1 - p_r) * p_u) + @staticmethod + def three(): + p_u_given_rain = 0.2 + return p_u_given_rain * p_r + + @staticmethod + def four(): + n = 137 + p_bail = 0.4 + p_at_least_50_bail = 0.0 + for x in range(50, n + 1): + p_at_least_50_bail += binom.pmf(x, n, p_bail) + return p_at_least_50_bail + + @staticmethod + def five(): + n = 10 + h = 8 + t = 2 + return 1.0 - BetaDistribution.calc(0.5, 8, 2) + + + @staticmethod + def test(): + print("P(R AND U) = {0}".format(Exercises.one())) + print("P(!R OR U) = {0}".format(Exercises.two())) + print("P(U AND R) = {0}".format(Exercises.three())) + print("P(At least 50 bail) = {0}".format(Exercises.four())) + print("P(fair) = {0}".format(Exercises.five())) def test_probability_module(): @@ -67,3 +108,5 @@ def test_probability_module(): print(">> Beta distribution") print(BetaDistribution.calc(0.9,8,2)) print(BetaDistribution.calc_region(0.8, 0.9, 8, 2)) + print(">> Exercises") + Exercises.test()