生日悖论指如果一个房间里有23 或以上人,那么至少有两个人生日相同的 概率大于50%。编写程序,输出在不同随机样本数量下,23 个人中至少两个人生日相同的概率。
from random import randint def list_birth(): list_birth=[] for i in range(23): x=randint(1,12) if x in [1,3,5,7,8,10,12]: y=randint(1,31) elif x==2: y=randint(1,28) else: y=randint(1,30) list_birth.append((x,y)) return list_birth #建立生日日期对的列表,这里也可以用365天来算 def set_birth(): set_birth=set(list_birth()) return set_birth #转换成集合是为了去重,若集合长度小于23,则说明,有生日一样的日期被去掉了 def main(count): n=0 for i in range(count): list_birth() set_birth() if len(set_birth())<23:n=n+1 chance=n/count #计算去重的次数占总循环次数的比例,即概率 print("{:.2%}".format(chance)) main(10000)
