用蒙特卡罗方法研究Python中的生日悖论?

用蒙特卡罗方法研究Python中的生日悖论?,python,python-3.x,montecarlo,birthday-paradox,Python,Python 3.x,Montecarlo,Birthday Paradox,试图找到进入房间所需的最小人数,以使两个人共享同一个生日的概率至少达到50%,使用蒙特卡罗方法,众所周知的解决方案是23人,但我似乎找不到我在逻辑或实施方面的错误。错误在于表达你对现有日期的看法: if date in [dates]: 让我们来举一个例子,你已经找到了日期3和15,而你又画了一个15岁的生日。此check语句的计算结果为 if 15 in [ [3, 15] ]: 这是假的!右边的表达式有一个元素,一个列表。整数15和列表[3,15]不可能相等,因此检查将始终失败。相反,请

试图找到进入房间所需的最小人数,以使两个人共享同一个生日的概率至少达到50%,使用蒙特卡罗方法,众所周知的解决方案是23人,但我似乎找不到我在逻辑或实施方面的错误。错误在于表达你对现有日期的看法:

if date in [dates]:
让我们来举一个例子,你已经找到了日期3和15,而你又画了一个15岁的生日。此check语句的计算结果为

if 15 in [ [3, 15] ]:
这是假的!右边的表达式有一个元素,一个列表。整数15和列表[3,15]不可能相等,因此检查将始终失败。相反,请使用教程中所示的签入检查:

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
是的,您的代码中还有几个错误。您打印了一个计数器,而不是重复的日期,并且每次通过循环都会重置计数器,因此最终比例总是除以1

一旦修复了这些问题,输出将如下所示

double birthday 204
double birthday 40
double birthday 268
double birthday 260
double birthday 188
double birthday 136
double birthday 324
0.07
最后,您的问题描述表明,当您发现重复项时,您将退出循环。正如上面的输出所示,这不是您正在做的。您需要一份中断声明。

可能重复的