用python写生日悖论时遇到点问题

用python写一个程序,包含两个函数data(n)和run(m)
data用来随机生成n个人的生日并返回是否有重复
run用来多次重复运行data(m可设置运行次数)并统计不同n时至少有两个人的生日重复的概率。
其实就是想证明传说中的生日悖论啦。
下面贴代码,pycharm一直运行无结果,也找不到语法错误,大神帮帮忙啊。

import random
import collections


def data(n):
    k = 0
    data_n = []
    while k <= n:
        month, day = random.randrange(1, 13), random.randrange(1, 32)
        if (month, day) in [(2, 29), (2, 30), (2, 31), (4, 31), (6, 31), (9, 31), (11, 31)]:
            continue
        data_n.append((month, day))
        k = k+1
    return n if len(set(data_n)) < len(data_n) else 0


def run(m, keys=range(5, 101, 5)):
    k = 0
    data_back = []
    print('统计', m, '次数据的结果是:')
    while k < m:
        for a in keys:
            data_back.append(data(a))
        k = k+1
    c1 = collections.Counter(data_back)
    for key in keys:
        print('在', key, '人中存在两人生日相同的概率是:', c1[key]/m)

这是运行结果:在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值