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() # NameErrorNameError: 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% шанс):
import random
chance = 0.3
if random.random() < chance:
print("Событие произошло")
else:
print("Событие не произошло")Событие произошло
Генерация случайной задержки между запросами:
import random, time
def make_request():
delay = random.random() * 2 # Задержка от 0 до 2 секунд
time.sleep(delay)
return f"Запрос выполнен с задержкой {delay:.2f} сек"
print(make_request())Запрос выполнен с задержкой 1.37 сек
Создание случайного градиентного цвета:
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))
Монте-Карло оценка числа π:
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
Генерация случайного пароля с заданным распределением символов:
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