Python中的生日矛盾与蒙特卡洛方法?

时间:2019-09-27 22:32:28

标签: python python-3.x montecarlo birthday-paradox

尝试使用monte carlo方法找到“进入”一个房间的最小人数,以使两个人共享同一生日的概率至少达到50%(众所周知的解决方案是23个人,但是我似乎找不到逻辑或实现上的错误)

1 个答案:

答案 0 :(得分:1)

错误在于表达您如何寻找现有日期:

if date in [dates]:

让我们以您已经找到日期3和15的情况为例,您又画了15个生日。该检查语句的评估结果为

if 15 in [ [3, 15] ]:

这是False!右侧的表达式具有 one 元素,即一个列表。整数(15)和列表([3, 15])不可能相等,因此检查将始终失败。而是使用in检查,如您的教程所示:

if date in dates:

输出:

double birthday 1
double birthday 2
double birthday 3
double birthday 4
double birthday 5
double birthday 6
double birthday 7
double birthday 8
double birthday 9
double birthday 10
double birthday 11
double birthday 12
double birthday 13
13.0

是的,您的代码中还有几个错误。您打印了一个计数器而不是重复的日期,并且每次循环都重置counter,所以最终比例总是除以1

修复这些问题后,输出将类似于

double birthday 204
double birthday 40
double birthday 268
double birthday 260
double birthday 188
double birthday 136
double birthday 324
0.07

最后,您的问题描述说,当您发现重复项时退出循环。如上面的输出所示,这不是您正在做的事情。为此,您需要一个break语句。