Есть ли реальные случайные числа в компьютерах?
Еще один модуль, который стоит упомянуть, называется random
.
Он предоставляет некоторые механизмы, позволяющие вам работать с псевдослучайными числами.
Обратите внимание на префикс псевдо. Числа, сгенерированные модулями, могут выглядеть случайными в том смысле, что вы не можете предсказать их последующие значения, но не забывайте, что все они рассчитываются с использованием очень точных алгоритмов.
Алгоритмы не случайны - они детерминированы и предсказуемы. Только те физические процессы, которые полностью выходят из-под нашего контроля (например, интенсивность космического излучения), могут быть использованы в качестве источника фактических случайных данных. Данные, полученные с помощью детерминированных компьютеров, ни в коем случае не могут быть случайными.
Генератор случайных чисел принимает значение, называемое seed(начальное), обрабатывает его как входное значение, вычисляет "случайное" число на его основе (метод зависит от выбранного алгоритма) и создает новое начальное значение.
Длина цикла, в котором все начальные значения уникальны, может быть очень большой, но она не бесконечна - рано или поздно начальные значения начнут повторяться, и генерируемые значения также повторятся. Это нормально. Это особенность, а не ошибка.
Начальное значение, установленное во время запуска программы, определяет порядок появления сгенерированных значений.
Случайный фактор процесса может быть увеличен путем установки начального числа с номером, взятым из текущего времени - это может гарантировать, что каждый запуск программы будет начинаться с другого начального значения (поэтому будет использовать разные случайные числа).
К счастью, такая инициализация выполняется в Python во время импорта модуля.