Упрощенная версия вашего кода
import random
def calc_birthday_probability(number_of_people = 30, num_trials=1000):
dups_found = 0
for _ in range(num_trials):
birthdays = [random.randint (1,365) for _ in range(number_of_people)]
# set of birthdays which are duplicates
duplicates = set(x for x in birthdays if birthdays.count(x) > 1)
if len(duplicates) >= 1:
dups_found += 1 # increment since at least one duplicate
return number_of_people, dups_found/num_trials * 100
num_people = int(input("Number of people: "))
print(f'{calc_birthday_probability(num_people, 1000):.2f}%')
Тест
Тестирование только с 1000 испытаний, поскольку достаточно для сравнения результатов с ссылкой
for num_people in range(1, 52, 2):
print(f'{num_people} --> {calc_birthday_probability(num_people, 1000):.2f}%')
Выход
1 --> 0.00%
3 --> 0.40%
5 --> 3.10%
7 --> 6.10%
9 --> 9.90%
11 --> 13.70%
13 --> 19.00%
15 --> 25.30%
17 --> 34.60%
19 --> 37.70%
21 --> 46.50%
23 --> 53.30%
25 --> 57.30%
27 --> 59.60%
29 --> 70.40%
31 --> 72.40%
33 --> 77.90%
35 --> 81.60%
37 --> 84.30%
39 --> 87.90%
41 --> 89.30%
43 --> 93.40%
45 --> 93.70%
47 --> 95.00%
49 --> 96.10%
51 --> 96.60%