Многим компьютерным приложениям необходимо генерировать случайные числа. Однако ни одно из них не генерирует действительно случайное число. Python, как и многие другие языки программирования, использует генератор псевдослучайных чисел. Генерация случайных чисел в Python основана на алгоритме Вихрь Мерсенна. Этот метод быстрый и потокобезопасный, но не подходит для криптографических целей.
Стандартная библиотека Python содержит модуль random
, в котором есть различные функции для работы со случайными числами.
random.seed([initializer]) – этот метод инициализирует генератор случайных чисел. Когда модуль random
импортируется, генератор инициализируется с помощью системного времени. Чтобы повторно запустить генератор, используйте любой объект int
, str
, byte
или bytearray
. При помощи этого метода можно воспроизводить одну и ту же последовательность чисел любое количество раз. В примере ниже генератор случайных чисел инициализируется с помощью числа 2
и при каждом запуске программы мы будем получать одну и ту же последовательность чисел.
import random random.seed(2) random_number_1 = random.randint(1, 10) random_number_2 = random.randint(1, 10) print(random_number_1, random_number_2) # 1 2
random.getstate() — эта функция вместе с функцией setstate()
помогает воспроизводить одни и те же случайные данные снова и снова. Функция getstate()
возвращает внутреннее состояние генератора случайных чисел. Больше информации вы можете найти по ссылке.
random.setstate(state) — эта функция восстанавливает внутреннее состояние генератора.
Следующие функции предназначены для генерации случайных целых чисел:
random.randrange() − эта функция генерирует случайное целое число в пределах заданного диапазона чисел. Может принимать три параметра.
random.randrange([start], stop[, step])
Параметры start
и step
являются необязательными. Их значения по умолчанию равны 0 и 1 соответственно. Шаг (step
) определяет интервал между последовательными числами.
>>> random.randrange(10) 5 >>> random.randrange(10, 20) 17 >>> random.randrange(100, 200, 2) 188
Примечание: помните, что выходные данные примеров в этой статье могут не совпадать, так как они генерируются случайным образом.
random.randint(start, stop) — эта функция генерирует случайное целое число x
, такое что start ≤ x ≤ stop
. Это похоже на функцию randrange()
без параметра step
.
>>> random.randint(1,10) 6 >>> random.randint(100, 200) 134
Следующие функции работают со случайными числами с плавающей запятой:
random.random() — эта функция генерирует случайное число с плавающей запятой в диапазоне от 0.0 до 1.0.
>>> random.random() 0.668544544081956
random.uniform(start, stop) — эта функция возвращает случайное число x
с плавающей запятой, такое что start ≤ x ≤ stop
для start ≤ stop
и stop ≤ x ≤ start
для stop < start
.
>>> random.uniform(0.5,1.5) 1.2760281470664903 >>> random.uniform(1,10) 7.336985794193224 >>> random.uniform(10,5) 7.817794757786727
Следующие функции работают c последовательностями, а именно — со строками, списками или кортежами:
random.choice() − эта функция выбирает случайный элемент из последовательности. Если последовательность пуста, то возникает ошибка IndexError
.
>>> random.choice("Pythonist") 'o' >>> random.choice(range(10)) 2 >>> random.choice([15,31,6,29,55, 5]) 55 >>> random.choice((15,31,6,29,25, 55)) 15
random.choices() − эта функция случайным образом выбирает несколько элементов из списка. Первый параметр этой функции — последовательность, а второй — количество элементов, которые нужно вернуть. Возвращает список, в котором может повторяться несколько раз один и тот же элемент.
>>> name = "Pythonist" >>> random.choices(name, k = 2) ['s', 'n']
random.shuffle() — эта функция переупорядочивает (перемешивает) элементы в изменяемой (mutable) последовательности и размещает их случайным образом.
>>> num = [10,20,30,40,50] >>> random.shuffle(num) >>> num [50, 20, 40, 30, 10]
random.sample(sequence, n) — эта функция возвращает список случайно выбранных элементов из последовательности. Результирующий список содержит только уникальные элементы.
>>> name = "Pythonist" >>> nm = random.sample(name, k = 5) >>> name, nm (Pythonist, ['n', 'P', 'y', 't', 'h'])
Более подробную информацию о функциях модуля random
вы можете найти в документации.