Python знаменит тем, что в нем доступно большое количество стандартных библиотек — так называют модули и пакеты, в которых уже реализованы тысячи разных функций. Разработчику полезно разбираться в этих стандартных библиотеках, ведь это знание позволяет экономить время и силы.
В этом уроке мы познакомимся с одной из стандартных библиотек — модулем random
.
Модуль random
При разработке программ иногда возникает потребность сгенерировать случайное число. Для этого в Python можно использовать модуль random. Он предоставляет множество функций, но мы пока остановимся на двух:
randint
— сгенерировать целое число в заданном диапазонеchoice
— выбрать случайный элемент из заданного набора
Генерация случайных чисел
Чтобы сгенерировать случайное число, нужно импортировать функцию randint
из модуля random
:
from random import randint
Для примера попробуем сгенерировать число от 1 до 100:
random_number = randint(1, 100)
Обратите внимание, что обе границы диапазона включены — значит, randint
может выдать любое значение в диапазоне, в том числе 1 и 100.
Перейдем к более сложному примеру:
string = "abcde"
random_index = randint(0, len(string) - 1)
char = string[random_index]
Здесь программа должна выбрать случайный символ из строки string
. При этом:
- Строка в переменной
string
имеет длину 5 - Индекс последнего элемента в строке равен 4
- Символы строки индексируются с нуля
Если мы попробуем сгенерировать число через randint(0, 5)
, то в какой-то момент получим значение 5. Тогда программа выдаст ошибку IndexError
: она не сможет выдать пятый символ из четырех.
Как это предотвратить? Нужно не просто задать верхнюю границу диапазона, а вычислить ее — то есть вычесть единицу из длины строки. Именно так и сделано в примере кода выше.
Выбор случайного элемента
Выше мы рассмотрели пример, в котором выбирается случайный символ строки. Эта задача возникает достаточно часто, поэтому в модуле random
существует функция choice
.
Если использовать эту функцию, выбор случайного символа из строки будет выглядеть так:
from random import choice
string = "abcde"
char = choice(string)
Используя choice
, не нужно думать о границах диапазона — функция сама определяет, как правильно выбирать элементы. При этом важно, чтобы строка для выбора не была пустой. Иначе мы получим ошибку IndexError: Cannot choose from an empty sequence
: «Нельзя выбрать из пустой строки».
Случайна ли случайность?
В основе модуля random
лежит генератор псевдослучайных чисел — на самом деле, число выбирается не случайно, а на основе сложных математических вычислений. Из-за этого random
не принято использовать в сферах, где нужна повышенная безопасность.
В криптографии, шифровании и других подобных сферах используют модуль secrets. В основе которого менее предсказуемый механизм случайной генерации.