Python знаменит тем, что поставляется в комплекте с «батарейками» — так называют модули и пакеты, составляющие стандартную библиотеку. Более того, батареек в поставке Пайтона изрядное количество! Настоящий питонист (pythonista) — так мы, программисты на Python, себя называем — обязан хорошо ориентироваться в стандартной библиотеке, ведь это знание позволяет экономить время и силы. В этом уроке мы познакомимся с первой батарейкой — модулем random
.
При разработке программ довольно часто возникает необходимость получить некоторое случайно выбранное из некоего множества значение. Случайные значения полезны, когда мы разрабатываем компьютерные игры, генерируем изображения и звук, и даже просто пишем тесты.
Любое значение в компьютере может быть представлено в виде набора чисел, поэтому получение случайных значений всегда предполагает использование Генератора Случайных Чисел, ГСЧ. ГСЧ бывают программными (специализированные программы) и аппаратными (специализированные устройства), но программист обычно работает с некоторой обобщённой «обёрткой» — модулем или пакетом, который скрывает ненужные детали.
Модуль 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
имеет длину 5. Но мы помним, что символы строки индексируются с нуля, поэтому если сгенерировать индекс так randint(0, 5)
, то в какой-то момент мы получим значение 5, и при попытке взять символ по этому индексу мы увидим ошибку IndexError
: индекс последнего элемента в строке равен 4! Вот поэтому в коде выше из длины вычитается единица.
Выше мы рассмотрели пример, в котором выбирался случайный символ строки. Эта задача возникает достаточно часто, поэтому в модуле random
существует функция choice
. С использованием этой функции выбор символа строки будет выглядеть так:
from random import choice
string = 'abcde'
char = choice(string)
При использовании choice
не нужно думать о границах генерируемых индексов. И даже о самих индексах думать не нужно — функция сама знает, как правильно и безопасно выбирать элементы! Правда, придётся заботиться о том, чтобы строка, из который мы выбираем символы, не была пустой, иначе мы получим ошибку IndexError: Cannot choose from an empty sequence
(«Нельзя просто так взять и выбрать, если выбирать не из чего»).
Пока мы можем использовать choice
только со строками, ведь это единственный тип, значения которого могут содержать несколько элементов. Но в дальнейшем мы познакомимся и с другими составными типами — и со многими из таких типов функция choice
тоже может работать!
Строго говоря, генерируемые числа у компьютера получаются не полностью случайными, поэтому большинство ГСЧ представляют собой генераторы псевдослучайных чисел. И хотя для простоты приставку «псевдо-» часто опускают (как поступили и мы), о ней не стоит забывать. Дело в том, что некоторые алгоритмы требуют максимально случайной генерации чисел. Одна из областей с такими высокими требованиями к качеству случайности — криптография (шифрование). Представьте, что вы сгенерировали случайный пароль, длинный и сложный, а злоумышленник, пользуясь тем, что при определённых условиях можно воспроизвести ту же последовательность случайных чисел, получил тот же пароль! Вот поэтому существует большое количество специализированных ГСЧ, безопасных для использования в шифровании и создание таких генераторов — это важная, сложная и интересная работа.
Вам ответят команда поддержки Хекслета или другие студенты.
Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.
Загляните в раздел «Обсуждение»:
Статья «Ловушки обучения»
Вебинар «Как самостоятельно учиться»
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт