Random.random: примеры (PYTHON)

Генерация случайных чисел при помощи random.random в Python
Раздел: Случайные числа, Дробные числа
random.random: float

Основные характеристики функции random.random

Функция random.random() является частью стандартного модуля random в Python. Она используется для генерации псевдослучайного числа с плавающей точкой в диапазоне [0.0, 1.0). Это означает, что возвращаемое значение всегда больше или равно 0.0 и строго меньше 1.0.

Функция не принимает никаких аргументов. Её вызов всегда выглядит как random.random(). Внутреннее состояние генератора можно инициализировать с помощью random.seed() для получения воспроизводимых последовательностей, что полезно при тестировании.

Возвращаемое значение - число с плавающей точкой типа float. Качество случайности зависит от реализации генератора Mersenne Twister, который является детерминированным алгоритмом, но обеспечивающим хорошее распределение чисел для большинства задач.

Базовые примеры вызова функции

Простое получение случайного числа:

import random
value = random.random()
print(value)
0.5488135039273248

Генерация нескольких чисел в цикле:

import random
for _ in range(3):
    print(random.random())
0.7151893663724195
0.6027633760716439
0.5448831829968969

Использование seed для воспроизводимости:

import random
random.seed(42)
print(random.random())
print(random.random())
0.6394267984578837
0.025010755222666936

Похожие функции в Python

  • random.uniform(a, b) - возвращает случайное число с плавающей точкой в заданном диапазоне [a, b] (или [b, a]). Подходит, когда нужны числа не из стандартного диапазона [0, 1).
  • random.randint(a, b) - возвращает случайное целое число N, такое что a <= N <= b. Используется для получения целых значений.
  • random.randrange(start, stop[, step]) - более гибкая функция для получения случайных целых чисел из диапазона с шагом.
  • random.choices(population, weights=None, k=1) - возвращает список элементов выбранных из population с учётом весов. Полезно для моделирования дискретных распределений.
  • numpy.random.random() - функция из библиотеки NumPy, которая может генерировать массивы случайных чисел и работает значительно быстрее при большом количестве операций.

Выбор функции зависит от задачи: random.random() - базовая функция для чисел от 0 до 1, uniform - для произвольного диапазона, randint - для целых чисел, а NumPy - для высокопроизводительных вычислений.

Аналоги функции в других языках программирования

JavaScript: Math.random() возвращает число в диапазоне [0, 1). Аналогична Python, но не требует импорта модуля.

console.log(Math.random());
0.5488135039273248

PHP: rand() / mt_rand() возвращают целые числа. Для float используют деление.

echo mt_rand() / mt_getrandmax();
0.54881350392732

Java: Math.random() из стандартной библиотеки возвращает double в [0.0, 1.0). Также есть класс java.util.Random.

System.out.println(Math.random());
0.5488135039273248

C#: Random.NextDouble() эквивалентен random.random().

Random rnd = new Random();
Console.WriteLine(rnd.NextDouble());
0.5488135039273248

Golang: rand.Float64() из пакета math/rand.

import "math/rand"
fmt.Println(rand.Float64())
0.5488135039273248

Kotlin: Random.nextDouble() из kotlin.random.Random.

println(Random.nextDouble())
0.5488135039273248

Lua: math.random() без аргументов возвращает число в [0,1).

print(math.random())
0.5488135039273248

SQL (PostgreSQL): RANDOM() возвращает значение типа double precision в диапазоне [0.0, 1.0).

SELECT RANDOM();
0.5488135039273248

Часто встречающиеся ошибки

Ошибка импорта модуля:

random()  # NameError
NameError: name 'random' is not defined

Правильный подход:

import random
random.random()

Неправильное ожидание диапазона. Функция никогда не возвращает 1.0:

import random
value = random.random()
if value == 1.0:  # Условие почти никогда не выполнится
    print("Единица!")
else:
    print("Не единица")
print(value)
Не единица
0.4238550485581797

Использование без инициализации seed для криптографических задач. random.random() не является криптографически стойким:

# Небезопасно для паролей или токенов
import random
token = ''.join(str(random.random()) for _ in range(10))
print(token[:50])

Для таких задач используют secrets модуль.

Изменения в последних версиях Python

В Python 3.9 появился параметр random.randbytes(n) для генерации случайных байтов, что расширяет возможности модуля, но не затрагивает непосредственно random.random().

В Python 3.11 улучшена производительность модуля random за счет оптимизации внутренних структур данных. Это коснулось и функции random.random(), хотя её интерфейс остался неизменным.

Начиная с Python 3.2, по умолчанию используется реализация Mersenne Twister, которая была стабильна во всех последующих версиях. Изменения в алгоритме не производились, что обеспечивает обратную совместимость.

Расширенные примеры применения

Моделирование вероятности события (например, 30% шанс):

Пример python
import random
chance = 0.3
if random.random() < chance:
    print("Событие произошло")
else:
    print("Событие не произошло")
Событие произошло

Генерация случайной задержки между запросами:

Пример python
import random, time
def make_request():
    delay = random.random() * 2  # Задержка от 0 до 2 секунд
    time.sleep(delay)
    return f"Запрос выполнен с задержкой {delay:.2f} сек"
print(make_request())
Запрос выполнен с задержкой 1.37 сек

Создание случайного градиентного цвета:

Пример python
import random
def random_gradient():
    r1, g1, b1 = random.random(), random.random(), random.random()
    r2, g2, b2 = random.random(), random.random(), random.random()
    return f"linear-gradient(to right, rgb({int(r1*255)},{int(g1*255)},{int(b1*255)}), rgb({int(r2*255)},{int(g2*255)},{int(b2*255)}))"
print(random_gradient())
linear-gradient(to right, rgb(198,113,250), rgb(142,245,135))

Монте-Карло оценка числа π:

Пример python
import random
def estimate_pi(num_points):
    inside = 0
    for _ in range(num_points):
        x, y = random.random(), random.random()
        if x*x + y*y <= 1:
            inside += 1
    return 4 * inside / num_points
print(f"Оценка π: {estimate_pi(1000000)}")
Оценка π: 3.141692

Генерация случайного пароля с заданным распределением символов:

Пример python
import random, string
def generate_password(length):
    chars = string.ascii_letters + string.digits + '!@#$%'
    password = ''
    for i in range(length):
        if random.random() < 0.7:  # 70% букв
            password += random.choice(string.ascii_letters)
        elif random.random() < 0.9:  # 20% цифр от оставшихся 30%
            password += random.choice(string.digits)
        else:  # 10% специальных символов
            password += random.choice('!@#$%')
    return password
print(generate_password(12))
aF8g!2kLp9$Q

питон random.random function comments

En
Random.random Return the next random floating point number in [0.0, 1.0)