生日悖论的Python实现

题目:如果你的班级中有23个学生,那么其中有两个人生日相同的概率为多大?


#!/usr/bin/env python
# coding=utf-8

import random;

def has_duplicates(t):
    s = t[:]; #make a copy of original list
    s.sort();
    for i in range(len(s)-1):
        if s[i] == s[i+1]:
            return True;
    return False;

def genarate_birthdy(numbers):
    birthday_list = [];
    for i in range(numbers):
        birthday_list.append(random.randint(1,365));
    return birthday_list;

def count_matches(student,samples):
    count = 0;
    t= []
    for i in range(samples):
        t= genarate_birthdy(student);
        if has_duplicates(t):
            count+=1

    return count;

num_students = 23;
numb_simulations= 1000000;

count = count_matches(num_students,numb_simulations);
rate = float(count)/numb_simulations*100

print 'After %d simulations'%numb_simulations;
print 'with %d student'%num_students;
print 'there were %d simulations with at least one match' %count;
print 'rate is %f'%rate


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值