- Функция randint() в Python
- Синтаксис метода randint()
- Пример метода randint()
- Множественный вызов метода randint()
- Модуль random на примерах — Изучение методов генерации случайных данных
- Цели данной статьи
- Как использовать модуль random в Python
- Python 3: Генерация случайных чисел (модуль random)¶
- random.random¶
- random.seed¶
- random.uniform¶
- random.randint¶
- random.choince¶
- random.randrange¶
- random.shuffle¶
- Вероятностные распределения¶
- Примеры¶
- Генерация произвольного пароля¶
- Ссылки¶
Функция randint() в Python
В этом руководстве мы сосредоточимся на методе randint() в Python. Нужно сначала импортировать модуль random в Python, чтобы начать использовать метод randint(). По сути, модуль создает псевдослучайность.
Синтаксис метода randint()
Метод randint() в Python возвращает случайное целочисленное значение между двумя нижними и верхними пределами (включая оба ограничения), предоставленными, как два параметра.
Следует отметить, что этот метод может генерировать только случайные значения целого типа.
Взгляните на синтаксис, чтобы мы могли дополнительно включить метод.
#randint() Syntax randint(lower limit , upper limit)
- нижний предел – это отправная точка, от которой будет генерироваться случайное целое число, включая его;
- верхний предел – это точка остановки, до которой метод вернет случайное целое число.
В приведенном выше примере возвращается целое число N, где N> = начало и N
Он работает так же, как randrange (begin, end), и, следовательно, является псевдонимом для него.
Пример метода randint()
Давайте посмотрим на приведенный ниже код, он иллюстрирует использование и работу метода randint().
import random beg=10 end=100 random_integer = random.randint(beg, end) print("The random integer is :", random_integer)
Ясно, что мы видим, что метод randint() генерирует случайное целочисленное значение в пределах от 1 до 100.
Множественный вызов метода randint()
Приведенный ниже фрагмент кода отвечает на все вышеупомянутые вопросы и дает нам четкое понимание.
import random beg=10 end=100 for i in range(5): print(random.randint(beg, end))
Для приведенного выше кода повторение метода random.randint() дает нам разные случайные целые числа для каждого вызова в пределах от 10 до 100.
Следовательно, мы можем сделать вывод, что значения случайны для каждого вызова и не пересекаются в нашем случае. Более того, когда количество вызовов велико и диапазон значительно меньше, в этом случае генерируемые случайные значения могут конфликтовать или перекрываться.
Как было сказано ранее, необходимо убедиться, что параметры верхнего и нижнего пределов должны быть целочисленного типа. Для других типов мы получаем ValueError, как показано ниже.
import random beg=5.3 end=10.2 print(random.randint(beg, end))
Traceback (most recent call last): File "C:/Users/sneha/Desktop/test.py", line 4, in print(random.randint(beg, end)) File "C:\Users\sneha\AppData\Local\Programs\Python\Python37-32\lib\random.py", line 222, in randint return self.randrange(a, b+1) File "C:\Users\sneha\AppData\Local\Programs\Python\Python37-32\lib\random.py", line 186, in randrange raise ValueError("non-integer arg 1 for randrange()") ValueError: non-integer arg 1 for randrange() Process finished with exit code 1
Модуль random на примерах — Изучение методов генерации случайных данных
В данной статье мы рассмотрим процесс генерации случайных данных и чисел в Python. Для этого будет использован модуль random и некоторые другие доступные модули. В Python модуль random реализует генератор псевдослучайных чисел для различных распределений, включая целые и вещественные числа с плавающей запятой.
Список методов модуля random в Python:
Метод | Описание |
---|---|
seed() | Инициализация генератора случайных чисел |
getstate() | Возвращает текущее внутренне состояние (state) генератора случайных чисел |
setstate() | Восстанавливает внутреннее состояние (state) генератора случайных чисел |
getrandbits() | Возвращает число, которое представляет собой случайные биты |
randrange() | Возвращает случайное число в пределах заданного промежутка |
randint() | Возвращает случайное число в пределах заданного промежутка |
choice() | Возвращает случайный элемент заданной последовательности |
choices() | Возвращает список со случайной выборкой из заданной последовательности |
shuffle() | Берет последовательность и возвращает ее в перемешанном состоянии |
sample() | Возвращает заданную выборку последовательности |
random() | Возвращает случайное вещественное число в промежутке от 0 до 1 |
uniform() | Возвращает случайное вещественное число в указанном промежутке |
triangular() | Возвращает случайное вещественное число в промежутке между двумя заданными параметрами. Также можно использовать параметр mode для уточнения середины между указанными параметрами |
betavariate() | Возвращает случайное вещественное число в промежутке между 0 и 1, основываясь на Бета-распределении, которое используется в статистике |
expovariate() | Возвращает случайное вещественное число в промежутке между 0 и 1, или же между 0 и -1 , когда параметр отрицательный. За основу берется Экспоненциальное распределение, которое используется в статистике |
gammavariate() | Возвращает случайное вещественное число в промежутке между 0 и 1, основываясь на Гамма-распределении, которое используется в статистике |
gauss() | Возвращает случайное вещественное число в промежутке между 0 и 1, основываясь на Гауссовом распределении, которое используется в теории вероятности |
lognormvariate() | Возвращает случайное вещественное число в промежутке между 0 и 1, основываясь на Логнормальном распределении, которое используется в теории вероятности |
normalvariate() | Возвращает случайное вещественное число в промежутке между 0 и 1, основываясь на Нормальном распределении, которое используется в теории вероятности |
vonmisesvariate() | Возвращает случайное вещественное число в промежутке между 0 и 1, основываясь на распределении фон Мизеса, которое используется в направленной статистике |
paretovariate() | Возвращает случайное вещественное число в промежутке между 0 и 1, основываясь на распределении Парето, которое используется в теории вероятности |
weibullvariate() | Возвращает случайное вещественное число в промежутке между 0 и 1, основываясь на распределении Вейбулла, которое используется в статистике |
Цели данной статьи
Далее представлен список основных операций, которые будут описаны в руководстве:
- Генерация случайных чисел для различных распределений, которые включают целые и вещественные числа с плавающей запятой;
- Случайная выборка нескольких элементов последовательности population ;
- Функции модуля random;
- Перемешивание элементов последовательности. Seed в генераторе случайных данных;
- Генерация случайных строки и паролей;
- Криптографическое обеспечение безопасности генератора случайных данных при помощи использования модуля secrets. Обеспечение безопасности токенов, ключей безопасности и URL;
- Способ настройки работы генератора случайных данных;
- Использование numpy.random для генерации случайных массивов;
- Использование модуля UUID для генерации уникальных ID.
В статье также даются ссылки на некоторые другие тексты сайта, связанные с рассматриваемой темой.
Как использовать модуль random в Python
Для достижения перечисленных выше задач модуль random будет использовать разнообразные функции. Способы использования данных функций будут описаны в следующих разделах статьи.
Python 3: Генерация случайных чисел (модуль random)¶
Python порождает случайные числа на основе формулы, так что они не на самом деле случайные, а, как говорят, псевдослучайные [1]. Этот способ удобен для большинства приложений (кроме онлайновых казино) [2].
[1] | Википедия: Генератор псевдослучайных чисел |
[2] | Доусон М. Программируем на Python. — СПб.: Питер, 2014. — 416 с.: ил. — 3-е изд |
Модуль random позволяет генерировать случайные числа. Прежде чем использовать модуль, необходимо подключить его с помощью инструкции:
random.random¶
random.random() — возвращает псевдослучайное число от 0.0 до 1.0
random.random() 0.07500815468466127
random.seed¶
random.seed() — настраивает генератор случайных чисел на новую последовательность. По умолчанию используется системное время. Если значение параметра будет одиноким, то генерируется одинокое число:
random.seed(20) random.random() 0.9056396761745207 random.random() 0.6862541570267026 random.seed(20) random.random() 0.9056396761745207 random.random() 0.7665092563626442
random.uniform¶
random.uniform(, ) — возвращает псевдослучайное вещественное число в диапазоне от до :
random.uniform(0, 20) 15.330185127252884 random.uniform(0, 20) 18.092324756265473
random.randint¶
random.randint(, ) — возвращает псевдослучайное целое число в диапазоне от до :
random.randint(1,27) 9 random.randint(1,27) 22
random.choince¶
random.choince() — возвращает случайный элемент из любой последовательности (строки, списка, кортежа):
random.choice('Chewbacca') 'h' random.choice([1,2,'a','b']) 2 random.choice([1,2,'a','b']) 'a'
random.randrange¶
random.randrange(, , ) — возвращает случайно выбранное число из последовательности.
random.shuffle¶
random.shuffle() — перемешивает последовательность (изменяется сама последовательность). Поэтому функция не работает для неизменяемых объектов.
List = [1,2,3,4,5,6,7,8,9] List [1, 2, 3, 4, 5, 6, 7, 8, 9] random.shuffle(List) List [6, 7, 1, 9, 5, 8, 3, 2, 4]
Вероятностные распределения¶
random.triangular(low, high, mode) — случайное число с плавающей точкой, low ≤ N ≤ high . Mode — распределение.
random.betavariate(alpha, beta) — бета-распределение. alpha>0 , beta>0 . Возвращает от 0 до 1.
random.expovariate(lambd) — экспоненциальное распределение. lambd равен 1/среднее желаемое. Lambd должен быть отличным от нуля. Возвращаемые значения от 0 до плюс бесконечности, если lambd положительно, и от минус бесконечности до 0, если lambd отрицательный.
random.gammavariate(alpha, beta) — гамма-распределение. Условия на параметры alpha>0 и beta>0 .
random.gauss(значение, стандартное отклонение) — распределение Гаусса.
random.lognormvariate(mu, sigma) — логарифм нормального распределения. Если взять натуральный логарифм этого распределения, то вы получите нормальное распределение со средним mu и стандартным отклонением sigma . mu может иметь любое значение, и sigma должна быть больше нуля.
random.normalvariate(mu, sigma) — нормальное распределение. mu — среднее значение, sigma — стандартное отклонение.
random.vonmisesvariate(mu, kappa) — mu — средний угол, выраженный в радианах от 0 до 2π, и kappa — параметр концентрации, который должен быть больше или равен нулю. Если каппа равна нулю, это распределение сводится к случайному углу в диапазоне от 0 до 2π.
random.paretovariate(alpha) — распределение Парето.
random.weibullvariate(alpha, beta) — распределение Вейбулла.
Примеры¶
Генерация произвольного пароля¶
Хороший пароль должен быть произвольным и состоять минимум из 6 символов, в нём должны быть цифры, строчные и прописные буквы. Приготовить такой пароль можно по следующему рецепту:
import random # Щепотка цифр str1 = '123456789' # Щепотка строчных букв str2 = 'qwertyuiopasdfghjklzxcvbnm' # Щепотка прописных букв. Готовится преобразованием str2 в верхний регистр. str3 = str2.upper() print(str3) # Выведет: 'QWERTYUIOPASDFGHJKLZXCVBNM' # Соединяем все строки в одну str4 = str1+str2+str3 print(str4) # Выведет: '123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM' # Преобразуем получившуюся строку в список ls = list(str4) # Тщательно перемешиваем список random.shuffle(ls) # Извлекаем из списка 12 произвольных значений psw = ''.join([random.choice(ls) for x in range(12)]) # Пароль готов print(psw) # Выведет: '1t9G4YPsQ5L7'
Этот же скрипт можно записать всего в две строки:
import random print(''.join([random.choice(list('123456789qwertyuiopasdfghjklzxc vbnmQWERTYUIOPASDFGHJKLZXCVBNM')) for x in range(12)]))
Данная команда является краткой записью цикла for, вместо неё можно было написать так:
import random psw = '' # предварительно создаем переменную psw for x in range(12): psw = psw + random.choice(list('123456789qwertyuiopasdfgh jklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM')) print(psw) # Выведет: Ci7nU6343YGZ
Данный цикл повторяется 12 раз и на каждом круге добавляет к строке psw произвольно выбранный элемент из списка.