def sameDate(numPeople, numSame):
possibleDates = range(366)
birthdays = [0]*366
for p in range(numPeople):
birthDate = random.choice(possibleDates)
birthdays[birthDate] += 1
return max(birthdays) >= numSame
def birthdayProb(numPeople, numSame, numTrials):
numHits = 0
for t in range(numTrials):
if sameDate(numPeople, numSame):
numHits += 1
return numHits/numTrials
print(birthdayProb(20,2,10000))
random.seed(0)
import math
for numPeople in [20]:
print(birthdayProb(numPeople, 2, 10000))
首次打印结果:0.4143 for循环内打印的结果:0.4035 为什么在for循环中打印它时会有所不同?
答案 0 :(得分:1)
birthdayProb
调用sameDate
,它使用random.choice()
。因此,根据设计,即使在输入相同的情况下,两次试验之间的结果也会始终存在一些差异。
如果您希望试验可重复但仍具有随机性,请在致电random.seed()
之前考虑使用birthdayProb
设置种子,以确保每次random.choice()
总是给出相同的结果
答案 1 :(得分:0)
这不是for循环的错。这是由于在代码中使用了random
。 birthdayProb
函数调用sameDate
函数。 sameDate
函数正在使用random.choice(possibleDates)
,因此每次调用时结果都会略有不同。