Найти в Дзене

Стандартные библиотеки в Python. Библиотека random. Приложение к видео 9

Оглавление

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Приложение к видеоуроку

Генерация случайных чисел в Python

Библиотека random очень полезный инструмент для решения самых разных задач. Рассмотрим функции библиотеки с некоторыми примерами. Как обычно библиотека подключается командой import

import random.

Базовая часть библиотеки

  • random.random() — генерирует вещественное число в промежутке от 0 до 1. При вторичном вызове генерирует новое случайное число из того же промежутка. Алгоритм устроен так, что равномерно заполняет указанный промежуток.
  • random.seed() — задаёт новую последовательность случайных чисел. При отсутствии данного метода в программе или при его использовании без параметра, для создания новой последовательности используется системное время. При использовании конкретного параметра каждый раз будет генерироваться одна и та же случайная последовательность.
    import random as r
    r.seed(12)
    print(r.random())
    print(r.random())
    print(r.random())
    print(r.random())
    Пр запуске такой программы, каждый раз будут генерироваться одни и те же числа
    import random as r
    r.seed()
    print(r.random())
    print(r.random())
    print(r.random())
    print(r.random())
    При запуске этой программы, каждый раз будет генерироваться новая последовательность чисел.
  • random.getstate(), random.setstate() первый метод возвращает кортеж с параметрами состояния генератора случайных чисел (объект state). Второй метод может задать состояние генератора случайных чисел на основе кортежа, полученного первым методом.
  • random.randint() — генерирует целое случайное число в указанном промежутке. Значения концов промежутка, также могут попасть в множество случайных чисел. Так random.randint(0, 4) может сгенерировать числа 0, 1, 2, 3, 4.
  • random.randomrange() генерация случайно последовательности целых чисел с шагом. Метод имеет три параметра: begin, end, step. При этом step (шаг) определяет последовательность чисел, которые могут быть сгенерированы. Последний параметр может быть опущен и тогда он полагается равным 1. Второй параметр это граница последовательности, которая никогда не генерируется. Например random.randrange(3, 11, 2) может сгенерировать одно из следующих чисел 3, 5, 7, 9.
  • random.choice() метод случайным образом выбирает элемент списка. Например
    print(random.choice([1, 5, 'qwerty', 'pi', 0]))
    будет напечатан один из элементов списка.
  • random.shuffle() перемешивает элементы списка случайным образом. Например
    import random as r
    ls = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    r.shuffle(ls)
    print(ls)
    Получаем
    [6, 5, 9, 1, 8, 7, 2, 0, 3, 4]
  • random.uniform() — возвращает вещественное число из заданного промежутка. Например r.uniform(0.1, 100.1).
  • random.sample() позволяет выбрать из последоватльности сразу несколько случайных элементов. Например
    import random as r
    print(r.sample([1, 2, '123q', 3, 'acv'], 3))
    сгенерировала
    ['acv', 1, 3]
  • random.getrandbits() — генерирует число, состоящее из указанного количества первых случайно определённых битов. Например, random.getrandbits(4) , будет генерировать числа в промежутке от 0 до 15 с включением 0 и 15.

Генерация распределений

Часть библиотеки random отводится для генерации случайных чисел подчиняющихся определённым распределениям. Поскольку распределения относится скорее к математике, чем к программированию просто перечислим эти методы библиотеки. Я думаю вернуться к этому вопросу, когда займёмся графикой.

  • random.triangular() генерация чисел треугольного распределения.
  • random.betavariate() — генерация чисел бета-распределения.
  • random.expovariate() — генерация чисел экспоненциального распределения.
  • random.gammavariate() — генерация чисел гамма-распределения.
  • random.gauss() — генерация чисел распределения Гауса.
  • random.lognormvariate() — генерация чисел логнормального распределения.
  • random.normalvariate() — генерация чисел нормального распределения.
  • random.vonmisesvariate() — генерация чисел распределения фон Мизеса.
  • random.paretovariate() — генерация чисел распределения Парето.
  • random.weibullvariate() — генерация чисел распределения Вейбулла.

Примеры программ

Генерация пароля из разных символов

import random as r
s1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
s2 = 'zyxwvutsrqponmlkjihgfedcba'
s3 = '0123456789'
s4 = '@#%$&^!)(*?'
ls = list(s1 + s2 + s3 + s4)
r.shuffle(ls)
psw = ''.join(ls[0:12])
print(psw)

Генерация пароля, с использованием одинаковых символов

import random as r
s1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
s2 = 'zyxwvutsrqponmlkjihgfedcba'
s3 = '0123456789'
s4 = '@#%$&^!)(*?'
ls = list(s1 + s2 + s3 + s4)
r.shuffle(ls)
psw = ''.join([r.choice(ls) for i in range(0, 12)])
print(psw)

Получение числа pi с помощью случайных чисел

Суть решения заключается в следующем. Представим себе квадрат со стороной равной 1. В квадрат вписана окружность. Соответственно радиус окружности равен 0.5. Площадь квадрата равна 1, площадь окружности pi*0.25. Теперь будем генерировать вещественные числа, в промежутке от 0 до 1. Пусть будет m генераций. Из них n попадет в круг. Поскольку точки должны располагаться боле-менее равномерно по квадрату, предположим, что pi (n / m) / 0.25. Чем больше будет сгенерировано случайных чисел, тем по идее более точным получиться число pi.

Текст программы см. ниже
Текст программы см. ниже
primer62.py

Вот несколько значений для m = 20000: 3.14.52, 3.14.78, 3.14.52, 3.1426.

Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Программист это писатель, пишущий для компьютера. Что я могу поделать, компьютеру нравится.
Программист это писатель, пишущий для компьютера. Что я могу поделать, компьютеру нравится.