【问题标题】:Birthday Paradox in Python with monte carlo method?Python中的生日悖论与蒙特卡罗方法?
【发布时间】:2020-01-28 05:11:21
【问题描述】:

使用蒙特卡洛方法(众所周知的解决方案是 23 人,但我似乎找不到我在逻辑或实现上的错误)

【问题讨论】:

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


【解决方案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 声明。

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 2015-06-15
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    相关资源
    最近更新 更多