#python #python-3.x
Вопрос:
Я пытаюсь научиться писать функцию, которая могла бы проверить вероятность одного и того же дня рождения двух человек в комнате.
Парадокс дня рождения гласит, что вероятность того, что у двух человек в комнате будет один и тот же день рождения, составляет более половины, при условии, что n, количество людей в комнате, больше 23. Это свойство на самом деле не является парадоксом, но многие люди находят его удивительным. Разработайте программу на Python, которая может проверить этот парадокс с помощью серии экспериментов на случайно сгенерированных днях рождения, которые проверяют этот парадокс для n = 5,10,15,20,…, 100.
Вот код, который показан в моей книге.
import random
def test_birthday_paradox(num_people):
birthdays = [random.randrange(0,365) for _ in range(num_people)]
birthday_set = set()
for bday in birthdays:
if bday in birthday_set: return True
else: birthday_set.add(bday)
return False
def paradox_stats(num_people = 23, num_trials = 100):
num_successes = 0
for _ in range(num_trials):
if test_birthday_paradox(num_people): num_successes = 1
return num_successes/num_trials
paradox_stats(31)
0.77
Я не могу понять код от def paradox_stats
начала до конца кода.
Кто-нибудь может мне помочь , пожалуйста?
Комментарии:
1. какая часть неясна?
Ответ №1:
Предположение, что paradox_state(31)
это ошибка, и вы хотите написать paradox_stats(31)
:
def paradox_stats(num_people = 23, num_trials = 100):
это определение функции, в которую можно вставить две переменные (эти переменные являются необязательными).
num_successes = 0
код инициализирует переменную num_successes
до нуля.
for _ in range(num_trials):
if test_birthday_paradox(num_people): num_successes = 1
return num_successes/num_trials
Здесь код выполняется в диапазоне от 0 до количества попыток, которые пользователь может определить, когда вызывает функцию (помните, что это необязательная переменная).
В этом цикле код использует предыдущую функцию test_birthday_paradox
(которую, я полагаю, вы понимаете, насколько вы сказали в своем вопросе), чтобы узнать, есть ли у кого-то в комнате тот же день рождения. В случае, если функция возвращает True (у кого-то такой же день рождения), переменная num_successes
увеличивает свое значение на единицу (так работает =
синтаксис, но если вам нужно дополнительное объяснение num_successes =1 == num_successes = num_successes 1
).
И как только цикл завершен, функция paradox_stats
возвращает вероятность в случайной выборке в виде числа успехов по сравнению с количеством испытаний.
Надеюсь, мой ответ поможет вам.