all-of-stats-hijinks/chapter-1/ex-23.py
2025-03-11 15:16:23 +01:00

80 lines
1.8 KiB
Python
Executable file

#!/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"""