为什么在不同位置打印时结果会有所不同?

时间:2020-10-07 04:21:25

标签: python python-3.x

    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循环中打印它时会有所不同?

2 个答案:

答案 0 :(得分:1)

birthdayProb调用sameDate,它使用random.choice()。因此,根据设计,即使在输入相同的情况下,两次试验之间的结果也会始终存在一些差异。

如果您希望试验可重复但仍具有随机性,请在致电random.seed()之前考虑使用birthdayProb设置种子,以确保每次random.choice()总是给出相同的结果

答案 1 :(得分:0)

这不是for循环的错。这是由于在代码中使用了randombirthdayProb函数调用sameDate函数。 sameDate函数正在使用random.choice(possibleDates),因此每次调用时结果都会略有不同。