Что такое функция def paradox_stats() в моем коде?

#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 возвращает вероятность в случайной выборке в виде числа успехов по сравнению с количеством испытаний.

Надеюсь, мой ответ поможет вам.