Random.randint: примеры (PYTHON)
random.randint(a: int, b: int): intОсновы функции random.randint
Функция random.randint(a, b) является частью стандартного модуля random в Python. Она применяется для генерации псевдослучайных целых чисел в заданном диапазоне.
Когда используется: Функция удобна для моделирования случайных событий, создания тестовых данных, реализации игровой механики, случайного выбора элементов по индексу и в любых задачах, требующих получения случайного целого числа из определенного интервала.
Аргументы функции
- a (обязательный, целое число): Нижняя граница диапазона (включительно).
- b (обязательный, целое число): Верхняя граница диапазона (включительно). Значение
bдолжно быть больше или равноa.
Возвращаемое значение
Функция возвращает случайное целое число N, удовлетворяющее условию: a <= N <= b. Тип возвращаемого значения - int.
Базовые примеры использования
Простой вызов
Генерация числа от 1 до 10:
import random
result = random.randint(1, 10)
print(result)7
Диапазон с отрицательными числами
import random
result = random.randint(-5, 5)
print(result)-2
Диапазон с одинаковыми границами
import random
result = random.randint(42, 42)
print(result)42
Похожие функции в Python
random.randrange
Функция random.randrange(stop) или random.randrange(start, stop[, step]) возвращает случайное число из диапазона, заданного range(start, stop, step). Верхняя граница stop исключается из диапазона. Предпочтительнее, когда нужен шаг или исключающая верхняя граница, как в циклах range.
import random
print(random.randrange(10)) # от 0 до 9
print(random.randrange(1, 11)) # от 1 до 10
print(random.randrange(0, 101, 5)) # 0, 5, 10, ... 1004 8 45
random.random
Функция random.random() возвращает случайное число с плавающей запятой в полуоткрытом диапазоне [0.0, 1.0). Используется, когда требуется дробное число, а не целое.
random.uniform
Функция random.uniform(a, b) возвращает случайное число с плавающей запятой из диапазона [a, b] или [b, a], в зависимости от того, что больше. Подходит для генерации дробных чисел в заданном интервале.
Аналоги функции в других языках
JavaScript
В JavaScript нет встроенной функции с аналогичной сигнатурой. Стандартный подход использует Math.random(), который возвращает дробь, и последующее масштабирование.
function randint(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log(randint(1, 10));6
Java
В Java используют класс java.util.Random и его метод nextInt. Для диапазона от min до max включительно применяют формулу.
import java.util.Random;
Random rand = new Random();
int min = 1;
int max = 10;
int result = rand.nextInt((max - min) + 1) + min;
System.out.println(result);3
PHP
Функция rand(int $min, int $max): int или mt_rand(int $min, int $max): int (предпочтительнее).
<?
echo mt_rand(1, 10);
?>9
C#
Класс System.Random и его метод Next(int minValue, int maxValue). Важно: maxValue является исключающей границей.
using System;
Random rnd = new Random();
int result = rnd.Next(1, 11); // Верхняя граница 11, чтобы включить 10
Console.WriteLine(result);5
Go
В пакете math/rand функция Intn(n int) int возвращает число из диапазона [0, n). Для произвольного диапазона нужна дополнительная логика.
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
min, max := 1, 10
result := rand.Intn(max - min + 1) + min
fmt.Println(result)
}2
Типичные ошибки
Аргументы в неправильном порядке
Если a больше b, функция вызовет ошибку ValueError.
import random
try:
random.randint(10, 1)
except ValueError as e:
print(f"Ошибка: {e}")Ошибка: empty range for randrange() (10, 1, -9)
Передача нецелочисленных аргументов
Функция ожидает целые числа (int). Передача других типов данных вызывает TypeError.
import random
try:
random.randint(1.5, 10.7)
except TypeError as e:
print(f"Ошибка: {e}")Ошибка: 'float' object cannot be interpreted as an integer
Забытый импорт модуля
try:
randint(1, 10)
except NameError as e:
print(f"Ошибка: {e}")Ошибка: name 'randint' is not defined
Изменения в последних версиях
Функция random.randint() остается стабильной и неизменной на протяжении многих версий Python. Важные изменения касаются в основном базового генератора псевдослучайных чисел (PRNG) модуля random.
- В Python 3.2 была изменена реализация по умолчанию:
random.randrange()(которая используется внутриrandint) для больших диапазонов стала более эффективной. - Начиная с Python 3.9, модуль
randomиспользует обновленную версию алгоритма Вихрь Мерсенна (Mersenne Twister) в качестве базового генератора. - Семантика и сигнатура функции
random.randint(a, b)не менялись.
Расширенные примеры применения
Моделирование броска двух игральных кубиков
import random
def roll_two_dice():
return random.randint(1, 6) + random.randint(1, 6)
print(f"Сумма броска: {roll_two_dice()}")
# Многократный бросок
results = [roll_two_dice() for _ in range(10)]
print(f"10 бросков: {results}")Сумма броска: 9 10 бросков: [7, 5, 8, 9, 6, 10, 4, 7, 11, 8]
Генерация случайного пароля из цифр
import random
def generate_numeric_pin(length=4):
pin_digits = [str(random.randint(0, 9)) for _ in range(length)]
return ''.join(pin_digits)
print(f"PIN-код: {generate_numeric_pin()}")
print(f"Длинный PIN: {generate_numeric_pin(8)}")PIN-код: 3175 Длинный PIN: 94012836
Случайный выбор элемента из списка
import random
items = ['яблоко', 'банан', 'апельсин', 'виноград', 'киви']
random_index = random.randint(0, len(items) - 1)
selected_item = items[random_index]
print(f"Случайный фрукт: {selected_item}")Случайный фрукт: виноград
Симуляция случайного события с вероятностью
import random
def simulate_event(success_probability_percent):
# Генерируем число от 1 до 100
roll = random.randint(1, 100)
return roll <= success_probability_percent
chance = 30 # 30% шанс успеха
success_count = sum(1 for _ in range(1000) if simulate_event(chance))
print(f"Успехов при 30% шансе за 1000 попыток: {success_count}")Успехов при 30% шансе за 1000 попыток: 298
Генерация случайной даты в пределах месяца
import random
def random_day_in_month(year, month):
# Простой пример: не учитывает разное количество дней в месяцах
day = random.randint(1, 28)
return f"{year:04d}-{month:02d}-{day:02d}"
print(random_day_in_month(2023, 11))2023-11-15
Создание тестовых данных
import random
import pandas as pd
# Генерация DataFrame со случайными возрастами и зарплатами
data = {
'id': range(1, 11),
'age': [random.randint(20, 65) for _ in range(10)],
'salary': [random.randint(30000, 120000) for _ in range(10)]
}
df = pd.DataFrame(data)
print(df.head())id age salary 0 1 42 85000 1 2 55 110000 2 3 29 45000 3 4 38 72000 4 5 61 95000