用python验证生日悖论并解释每一段代码
时间: 2023-05-25 10:06:19 浏览: 110
生日悖论是指一个房间里一群人中有两个人生日相同的概率远高于我们想象的。用 python 验证生日悖论,可以使用以下代码:
```python
import random
def has_duplicates(lst):
return len(lst) != len(set(lst))
def generate_birthdays(n):
return [random.randint(1, 365) for _ in range(n)]
def simulation(num_people, num_simulations):
num_successes = 0
for _ in range(num_simulations):
birthdays = generate_birthdays(num_people)
if has_duplicates(birthdays):
num_successes += 1
return num_successes / num_simulations
print(simulation(23, 10000))
```
解释每一段代码:
1. `import random` 引入 `random` 模块,用于生成随机数。
2. `def has_duplicates(lst)` 定义了一个判断一个列表中是否存在重复元素的函数。
3. `def generate_birthdays(n)` 定义了一个生成长度为 n 的生日列表的函数,其中每个元素都是 1~365 的随机整数,模拟了正常情况下每年的天数。
4. `def simulation(num_people, num_simulations)` 定义了一个模拟函数,它模拟了 num_simulations 次,在 num_people 个人中有生日相同的情况下成功的次数,并返回其概率。
5. `num_successes = 0` 初始化有生日相同的次数为 0。
6. `for _ in range(num_simulations):` 循环 num_simulations 次。
7. `birthdays = generate_birthdays(num_people)` 生成长度为 num_people 的生日列表。
8. `if has_duplicates(birthdays):` 若该列表中有重复的生日,则认为成功,num_successes 加一。
9. `return num_successes / num_simulations` 计算有生日相同的概率。
10. `print(simulation(23, 10000))` 输出在 23 个人中有生日相同的概率,运行 10000 次的结果。输出的结果在不同电脑上可能会略有不同,但通常在 0.5 左右,即概率达到了 50%。
阅读全文