试图找到“进入”一个房间所需的最小人数,以使两个人生日相同的概率至少为 50%,使用蒙特卡罗方法(众所周知的解决方案是 23 人,但我似乎无法找出我在逻辑或实施中的错误)
问问题
532 次
1 回答
1
错误在于表达您如何查找现有日期:
if date in [dates]:
让我们以您已经找到日期 3 和 15 的情况为例,并且您刚刚绘制了另一个 15 岁生日。此检查语句评估为
if 15 in [ [3, 15] ]:
这是False
!右边的表达式有一个元素,一个列表。整数 ( 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
声明。
于 2019-09-27T22:40:13.017 回答