Парадокс дня рождения в Python методом Монте-Карло? - PullRequest
0 голосов
/ 28 сентября 2019

Попытка найти наименьшее количество людей, необходимых для «входа» в комнату, чтобы иметь вероятность не менее 50% для двух человек, имеющих один и тот же день рождения, с использованием метода Монте-Карло (общеизвестное решение - 23 человека, ноКажется, я не могу найти свои ошибки в логике или реализации)

1 Ответ

1 голос
/ 28 сентября 2019

Ошибка в выражении того, как вы выглядите для существующей даты:

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.

...