'生日悖论'

时间:2016-01-15 14:31:11

标签: python function random probability birthday-paradox

我试着写一个'生日悖论'的功能。 我在互联网上找到了一些例子,并且将所有内容组合在一起并进行了一些修改,但仍有一些我在程序中无法理解的事情。

这是我的计划:

# The Birthday Paradox

print "If there are 23 students in your class, what are the chances that another student and you will have birthday in the same day?"
print ""
print "Use the function has_duplicates(numExamples) to check it out!"
print "Please write in (numExamples) the number of examples of different lists of birthdays of 23-students-classes you want to check."

def has_duplicates(numExamples):

import random
probability = float()

for example in range(numExamples):
   year = [0]*365
   print year
   foundprobability = False
   for i in range(23):
       birthday = random.randrange(365)
       year[birthday] = year[birthday] + 1
       if year[birthday]>1:
          foundprobability = True

   if foundprobability == True:
       probability = probability + 1

countprobabilty = float(probability/numExamples)
print "The probability of a shared birthday in", numExamples,
print "examples of different lists of birthdays of 23-students-classes is", countprobabilty

我不明白这条线的含义:

year = [0]*365

为什么我要这样的列表[0,0,0,0 ...]?

谢谢! Netta, 生物学学生

2 个答案:

答案 0 :(得分:1)

year = [0]*365创建一个包含值为0的365个元素的列表:[0,0,0,0...]

birthday = random.randrange(365)创建一个从0到365的列表并选择一个随机元素 见https://docs.python.org/2/library/random.html#random.randrange

答案 1 :(得分:1)

因为该算法需要365天每一天的计数器,如下所示:

   year[birthday] = year[birthday] + 1

为了使year[birthday]出现在此声明中,它必须先前已初始化,并且

    year = [0] * 365

初始化它。