用python求50 个人当中遇到与自己同一天过生日的人的概率有多大
时间: 2024-03-23 22:39:13 浏览: 17
这个问题可以用概率论中的巴塞尔问题(birthday problem)来解决。假设每个人的生日在一年中每一天出现的概率相等,忽略闰年,那么50个人中至少有两个人生日相同的概率可以用以下代码来计算:
```python
import math
def birthday_probability(n):
p = 1.0
for i in range(1, n):
p *= (365 - i) / 365.0
return 1 - p
print(birthday_probability(50))
```
输出结果为0.970,即50个人中至少有两个人生日相同的概率为97%左右。这说明在一个50人的群体中,很有可能会存在两个人生日相同的情况。
相关问题
使用随机抽样实现模拟概率分布 蒙特卡罗方法 生日悖论,遇到与自己同一天过生日的人, 50 个人当中出现这种缘分的概率有多大 写出代码
下面是使用 Python 实现的模拟代码:
```python
import random
def simulate_birthday_paradox(n, m):
count = 0
for i in range(m):
# 生成 n 个人的生日
birthdays = [random.randint(1, 365) for j in range(n)]
# 判断是否有两个或以上的人生日相同
if len(set(birthdays)) != n:
count += 1
# 计算概率
prob = count / m
return prob
# 示例:模拟 10000 次,在 50 个人中至少有两个人生日相同的概率
prob = simulate_birthday_paradox(50, 10000)
print("在50个人中至少有两个人生日相同的概率为:", prob)
```
在上面的代码中,`simulate_birthday_paradox` 函数用于模拟生日悖论。它接受两个参数:`n` 表示人数,`m` 表示模拟次数。在函数内部,我们使用一个循环来进行模拟。在每次循环中,我们首先生成 `n` 个人的生日,然后判断是否有两个或以上的人生日相同。如果有,则计数器 `count` 加 1。最后,根据计数器 `count` 和模拟次数 `m`,计算出在 `n` 个人中至少有两个人生日相同的概率,并返回该概率。
在上面的示例中,我们模拟了 10000 次,在 50 个人中至少有两个人生日相同的概率,并将结果输出到控制台。你可以根据需要修改模拟次数和人数。
假如一个班级有30名学生,这当中两个人同一天出生的概率是多大?(提示:用randint函数来生成随机的生日)python
这是一个经典的生日悖论问题。使用Python模拟可以得到近似的答案。下面是一个简单的实现:
```python
import random
def has_same_birthday():
birthdays = [random.randint(1, 365) for _ in range(30)]
return len(birthdays) != len(set(birthdays))
num_trials = 100000 # 模拟次数
num_positive = sum(1 for _ in range(num_trials) if has_same_birthday())
probability = num_positive / num_trials
print(f"两人同一天出生的概率是 {probability:.4f}")
```
程序中的`has_same_birthday`函数生成30个随机数,表示30名学生的生日。如果有两个或以上的随机数相同,则返回`True`;否则返回`False`。程序在`num_trials`次模拟中统计有多少次出现了至少两人同一天出生的情况,最后计算出概率并输出结果。
需要注意的是,这个程序只是一个估计,结果并不精确。如果想要得到更精确的结果,需要使用更复杂的方法,例如蒙特卡罗方法和组合数学方法。