Почему количество итераций имеет значение при генерации случайного числа? - PullRequest
2 голосов
/ 10 ноября 2019

Я хочу сгенерировать случайное число, используя данную функцию f1(). У меня есть решение, но я не могу понять количество итераций, необходимое (5 в данном случае) для генерации случайного числа.

Я пытался читать другие вопросы и ответы, но они сосредоточились на том, как генерировать случайное число(s), а не о том, почему следовали определенной технике.

Это мой код:

import random


def f1():
    return(random.randint(0, 1))


def f29():
    while(1):
        Res = 0
        for _ in range(0, 5):
            Res = Res << 1 | f1()
        if(Res <= 29):
            return (Res)


print(f29())

Я заметил одну вещь: если я изменю диапазон цикла for с 5 на 4появлялись только цифры ниже 20, если я изменил их на 3, появлялись только однозначные цифры. Может быть, мои наблюдения анекдотичны. Моя цель - сгенерировать случайное число от 0 до 29 включительно, используя f1 (), которая генерирует случайное целое число: 0 или 1.

1 Ответ

2 голосов
/ 10 ноября 2019

Это потому, что вы суммируете переменную Res каждую итерацию. Каждая итерация имеет вероятность увеличения Res на 1 бит, если f1() возвращает 1.

Если ваш f1() всегда возвращает 1, значение будет:
iter 1: 1
iter 2: 3
iter 3: 7
iter 4: 15

Вот почему при изменении диапазона с 5 на 4 отображаются только значения ниже 20. Максимальное значение может быть 15.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...