验证生日悖论的python实现

import random,time
n=eval(input("请问你想实验几次呀:"))
count=0
start=time.perf_counter()
for i in range(n):
    # 列表推导式:随机抽取从(1,366)抽取23次,组成列表
    bds = [random.randint(1,366) for x in range(23)]
    # 利用集合的无重复性来判断是否有人生日一致
    if len(bds) != len(set(bds)):
        count += 1
end=time.perf_counter()
timecost=round(end-start,2)
print("试验{}次后得到的概率是{}耗时是{}秒".format(n, round(count/n, 2),timecost))

本代码能根据输入过的任意实验次数,获得的概率,可以看出稳定在0.5附近

生日悖论是指在一个包含至少23个人的房间里,至少有两个人生日相同的概率大于50%。为了验证这个悖论,可以使用Python编写一个模拟程序。 以下是一个简单的Python程序,用于验证生日悖论: ```python import random def has_duplicates(lst): """判断列表中是否有重复元素""" return len(lst) != len(set(lst)) def generate_birthday(): """生成一个随机生日""" return random.randint(1, 365) def simulation(num_people): """进行一次模拟,返回是否有两个人生日相同""" birthdays = [generate_birthday() for i in range(num_people)] return has_duplicates(birthdays) def calculate_probability(num_people, num_simulations): """计算概率""" num_successes = 0 for i in range(num_simulations): if simulation(num_people): num_successes += 1 return num_successes / num_simulations if __name__ == '__main__': num_people = 23 num_simulations = 10000 probability = calculate_probability(num_people, num_simulations) print(f"在 {num_people} 个人中至少有两个人生日相同的概率为 {probability:.2%}") ``` 这个程序首先定义了一个`has_duplicates`函数,用于判断一个列表中是否有重复元素。然后定义了一个`generate_birthday`函数,用于生成一个随机生日。接着定义了一个`simulation`函数,用于进行一次模拟,返回是否有两个人生日相同。最后定义了一个`calculate_probability`函数,用于计算概率。 在主程序中,设置了23个人和10000次模拟,并调用`calculate_probability`函数计算概率。最后输出结果。 运行程序,可以得到类似以下的结果: ``` 在 23 个人中至少有两个人生日相同的概率为 50.13% ``` 可以看到,这个结果符合生日悖论的预期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值