import random
def has_same_birthday():
"""判断23个人中是否至少有两个人生日相同"""
birthdays = [random.randint(1, 365) for _ in range(23)]
return len(set(birthdays)) < 23
def estimate_probability(num_samples):
"""根据给定的样本数量估计概率"""
num_success = sum(has_same_birthday() for _ in range(num_samples))
return num_success / num_samples
# 计算在不同样本数量下的概率
for num_samples in [1000, 10000, 100000]:
probability = estimate_probability(num_samples)
print(f"样本数量为{num_samples}时,23个人中至少两个人生日相同的概率为{probability:.2%}")
上述代码中, has_same_birthday() 函数用于判断 23 个人中是否至少有两个人生日相同,具体做法是随机生成23个整数(对应生日),并使用 set() 函数去重,如果集合的长度小于23,则说明至少有两个人生日相同。estimate_probability() 函数则用于根据给定的样本数量估计概率,具体做法是循环生成指定数量的样本,并计算其中至少存在两个人生日相同的概率。最后,在样本数量分别为 1000、10000、100000 时,我们输出了概率的估计结果。