生日悖论列表是非类型

h-m*_*man 4 python birthday-paradox

我正试图用Python解决生日悖论.我很接近,但最后一块让我感到茫然.我正在使用随机生成给定范围和要创建的项目数的数字列表.这样可行.

然后我检查列表(上面生成的)是否有重复.这样可行.

然后我尝试生成给定(n)列表.这是我遇到麻烦的地方.它生成一个列表然后返回"NoneType"不可迭代.令我困惑的是,列表已生成,但Python并未将其视为列表.

这是代码:

def make_bd(n, r):
    """Generates (r) numbers of birthdays in a range (n)."""
    import random
    t = [random.randrange(n) for i in range(r)]
    print (t)


def has_dupe(test):
    """Here I test to see if I can detect a duplicate birthday.
This is based on problem #4."""

    d = []
    count = 0
    for number in test:
        if number in d:
            count = count + 1
        d.append(number)
    if count >= 1:
        return True
    return False

def dupebd(n,r,t):
    count_dupe = 0
    for i in range(n):
        if has_dupe(make_bd(r,t)):
            count_dupe = count_dupe + 1
    print (float(count)/n)       

dupebd(50,365,23)
Run Code Online (Sandbox Code Playgroud)

这是结果:

>>> has_dupe(make_bd(50,6))
[13, 3, 8, 29, 34, 44]
Traceback (most recent call last):
  File "<pyshell#45>", line 1, in <module>
    has_dupe(make_bd(50,6))
  File "<pyshell#44>", line 7, in has_dupe
    for number in test:
TypeError: 'NoneType' object is not iterable
Run Code Online (Sandbox Code Playgroud)

Dav*_*son 7

在第5行中,您打印t但不返回,因此make_bd返回None.将行更改为

return t
Run Code Online (Sandbox Code Playgroud)