Как работать с модулем random в Python
Как работать с модулем random в Python
Рассказываем о модуле random в Python: как он работает и какие функции в нём есть. Описываем методы его использования в программировании и приводим примеры кода.
Модуль random — это встроенный в язык Python модуль, в котором есть функции для генерации чисел и других псевдослучайных значений. На самом деле случайные величины бывают только в природе, а компьютеры генерируют их по определённому алгоритму, поэтому они называются псевдослучайными.
В отличие от других элементов Python, допустим массивов или ссылок, разработчики, которые пишут код на «Питоне», не пользуются модулем постоянно. Он предназначен для решения узкоспециализированных задач:
Разобраться, как использовать модуль random при решении конкретных задач, поможет курс «Python-разработчик». Программа занятий позволит изучить бэкенд с нуля за 9 месяцев под руководством опытных экспертов из Яндекса и других крупных компаний. Студенты освоят фреймворк Django, научатся работать с полезными инструментами, например с GitHub, PostgreSQL и Nginx, а по окончании курса составят портфолио, которое поможет в поиске работы.
Модуль random по умолчанию есть в Python, поэтому программисту не нужно устанавливать его отдельно. Разработчик может сразу начать применять его функции, после того как импортирует модуль в код.
Сделать это можно тремя способами.
1. Команда import random. Написав эту строчку кода, можно использовать любую функцию. Для этого нужно вызвать её через команду и название, разделённые точкой без пробелов. Допустим, чтобы получить случайное целое число, необходимо запустить randint:
import random
random_integer = random.randint(0, 100)
print(random_integer)
2. Команда from random import *. Такой способ позволяет вызывать функции, не указывая имя модуля. Допустим, так можно получить рандомное число от 0 до 1:
from random import *
random_integer = random(0, 1)
print(random_integer)
3. Команда from random import [название функции]. Даёт возможность вызвать конкретные функции модуля, не импортируя его целиком. Например, так:
from random import shuffle
result = shuffle(sequence)
print(result)
Чтобы понять, как работает модуль random в Python, нужно понять его возможности. Разберём ключевые функции, которые чаще всего применяют программисты на «Питоне»:
Эти функции random применяют как начинающие, так и опытные Python-разработчики. При этом программисты, которые глубоко погружены в язык, вместе с модулем также пользуются продвинутыми библиотеками. Допустим, для научных целей в связке с random пригодится SciPy — набор функций, который включает в себя методы оптимизации, линейной алгебры и статистики. Вместе они будут полезны, например, если стоит задача провести статистический анализ данных с рандомными величинами.
Также в модуле random есть большое количество распределений — к примеру, нормальное, гауссово или биномиальное. Они дают возможность генерировать случайные величины с конкретными параметрами.
Самый распространённый пример применения модуля random в работе программистов — написание кода быстрой сортировки, или сортировки Хоара (quicksort). Эта функция рекурсивно меняет расположение элементов в массиве, рандомно выбирая один из них в качестве опорного (pivot). Массив при этом делится на три части элементов:
● меньше опорного элемента;
● равные опорному элементу;
● больше опорного элемента.
Такая сортировка называется быстрой, потому что за счёт вероятностного выбора опорного элемента она работает быстрее, чем обычный алгоритм. Как гласит теорема о нижней границе сложности сортировки, для любого алгоритма сортировки, работающего на произвольном массиве, невозможно достичь лучшей временной сложности, чем O(n log n) — то есть определённого количества логарифмов за определённое число операций. Но быстрая сортировка с помощью модуля random делает это быстрее.
Пример кода:
import random
def quicksort(arr):
if len(arr) < 2:
return arr
else:
pivot = random.choice(arr)
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right)
# Пример использования функции quicksort:
my_array = [3, 1, 4, 6, 2, 5]
sorted_array = quicksort(my_array)
print("Отсортированный массив:", sorted_array)
Рассмотрим пример использования модуля random для генерации случайных автомобильных номеров. Код будет таким:
import random
# Генерация случайного номера
def generate_car_number():
# Определение допустимых символов для букв
letters = 'АВЕКМНОРСТУХ'
# Генерация случайных букв
first_letter = random.choice(letters)
second_letter = random.choice(letters)
# Определение допустимых цифр
digits = '0123456789'
# Генерация случайных цифр
number_part_1 = ''.join(random.choice(digits) for _ in range(3))
number_part_2 = ''.join(random.choice(digits) for _ in range(3))
return '{}{}{}{}'.format(first_letter, number_part_1, second_letter, number_part_2)
# Выводим сгенерированный номер
print(generate_car_number())
Этот код создаёт случайный автомобильный номер, состоящий из двух букв и двух наборов по три цифры.
Пример для опытных разработчиков — написание кода, который перемешивает список имён, выбирает случайных подопечных для игры «Тайный Санта» и отправляет им письма на почту. Для отправки писем на Python можно использовать библиотеки **smtplib** и **email**. Однако чтобы код работал, необходимо указать сервер, логин и пароль от почты, которая используется для рассылки. У всех почтовых сервисов, например у Яндекс Почты, есть SMTP-сервер, через который можно рассылать письма. Его данные и нужно добавить.
Пример кода:
import random
from email.message import EmailMessage
from smtplib import SMTP
# Создание списка имён
names = ['Иван', 'Мария', 'Сергей', 'Ольга', 'Дмитрий', 'Анна', 'Владимир', 'Елена', 'Александр', 'Наталья', 'Михаил', 'Татьяна', 'Константин', 'Артём', 'Ирина', 'Павел', 'Виктория', 'Евгений', 'Юлия', 'Кирилл']
def generate_secret_santa():
# Перемешивание списка имён
random.shuffle(names)
return names
def send_email(name, recipient):
msg = EmailMessage()
msg.set_content(f"Вы выбраны тайным Сантой! Поздравляем! Ваш подопечный — {recipient}.")
msg['Subject'] = "Уведомление от тайного Санты"
msg['From'] = 'your_email@example.com'
msg['To'] = name
server = SMTP('smtp.example.com')
server.starttls()
server.login('your_username', 'your_password')
server.send_message(msg)
server.quit()
# Генерация случайного выбора подопечных
selected_names = generate_secret_santa()
for i in range(len(selected_names)):
name = selected_names[i]
recipient = selected_names[(i + 1) % len(selected_names)] # Выбор случайного подопечного
send_email(name, recipient)
print("Уведомления отправлены!")
Совет эксперта
Читать также: