Add exercise 1.23

This commit is contained in:
Petar Kapriš 2025-03-10 20:16:08 +01:00
parent 673fa5f790
commit 14be29ba1b

80
chapter-1/ex-23.py Executable file
View file

@ -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"""