diff --git a/chapter-1/ex-23.py b/chapter-1/ex-23.py new file mode 100755 index 0000000..214a714 --- /dev/null +++ b/chapter-1/ex-23.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python + +import numpy as np +import random + +registered_events = {} + +# We'll define events as predicates: +# Also I'll use some decorators, just to show off + +# the decorator: +def event(event_pred): + key = event_pred.__name__ + val = (event_pred, 0) + registered_events[key] = val + return event_pred + +@event +def omega(value): + return True + +@event +def a1(value): + return value % 2 == 0 + +@event +def b1(value): + return value <= 4 + +@event +def ab1(value): + return a1(value) and b1(value) + +@event +def a2(value): + return value % 2 == 0 + +@event +def b2(value): + return value <= 5 + +@event +def ab2(value): + return a2(value) and b2(value) + +random.seed() +def dice_experiment(reps): + for i in range(reps): + r = random.randint(1,6) + for key, value in registered_events.items(): + func, count = value + if func(r): + count += 1 + newval = (func, count) + registered_events[key] = newval + +dice_experiment(1000) + +total = registered_events["omega"][1] +print(f"Total = ", registered_events["omega"][1]/total) +print(f"P^(A1) = ", registered_events["a1"][1]/total) +print(f"P^(B1) = ", registered_events["b1"][1]/total) +print(f"P^(A1)P^(B1) = ", registered_events["a1"][1]/total * registered_events["b1"][1]/total) +print(f"P^(AB1) = ", registered_events["ab1"][1]/total) +print(f"P^(A2) = ", registered_events["a2"][1]/total) +print(f"P^(B2) = ", registered_events["b2"][1]/total) +print(f"P^(A2)P^(B2) = ", registered_events["a2"][1]/total * registered_events["b2"][1]/total) +print(f"P^(AB2) = ", registered_events["ab2"][1]/total) + +"""Example output: + +Total = 1.0 +P^(A1) = 0.494 +P^(B1) = 0.667 +P^(A1)P^(B1) = 0.329498 +P^(AB1) = 0.329 +P^(A2) = 0.494 +P^(B2) = 0.835 +P^(A2)P^(B2) = 0.41249 +P^(AB2) = 0.329"""