Python:
Генерация случайных чисел
Как это сделать:
Python предоставляет модуль random, который помогает генерировать случайные числа для различных целей. Вот как начать:
Импортирование модуля
import randomГенерация случайного целого числа Между любыми двумя числами.
random_integer = random.randint(1, 10) print(random_integer)Пример вывода:
7Генерация случайного числа с плавающей точкой Между 0 и 1.
random_float = random.random() print(random_float)Пример вывода:
0.436432634653Если нужно число с плавающей точкой в другом диапазоне, умножьте:
random_float_range = random.random() * 5 # от 0 до 5 print(random_float_range)Пример вывода:
3.182093745Выбор случайного элемента из списка
greetings = ['Hello', 'Hi', 'Hey', 'Hola', 'Bonjour'] print(random.choice(greetings))Пример вывода:
HolaПеретасовка списка Идеально подходит для карточных игр или любых приложений, где нужно случайным образом изменить порядок.
numbers = list(range(10)) random.shuffle(numbers) print(numbers)Пример вывода:
[2, 5, 0, 4, 9, 8, 1, 7, 6, 3]
Глубокое погружение
Модуль random в Python использует генератор псевдослучайных чисел (ГПСЧ), в частности, алгоритм вихря Мерсенна, который хорошо подходит для общего использования, но не подходит для криптографических целей из-за его предсказуемости при наблюдении за достаточным количеством результатов. Модуль secrets, введенный в Python 3.6, предлагает лучшую альтернативу для генерации криптографически надежных случайных чисел, особенно полезных в приложениях, чувствительных к безопасности. Например, генерация безопасного случайного токена для ссылки на сброс пароля:
import secrets
token = secrets.token_hex(16)
print(token)Исторически генерация действительно случайных чисел была вызовом в вычислениях, ранние методы полагались на физические явления или вручную введенные начальные значения. Разработка и принятие алгоритмов, таких как вихрь Мерсенна (используется по умолчанию в модуле random Python по крайней мере до моего последнего обновления знаний в 2023 году), ознаменовали значительный прогресс. Однако постоянный поиск более безопасных и эффективных алгоритмов привел к включению модуля secrets для задач, связанных с криптографией. Эта эволюция отражает растущее значение безопасности в разработке программного обеспечения и необходимость более надежной случайности в приложениях, начиная от шифрования и заканчивая генерацией безопасных токенов.