Random.randint: примеры (PYTHON)

Генерация случайных целых чисел через random.randint
Раздел: Случайные числа, Целые числа
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, ... 100
4
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) не менялись.

Расширенные примеры применения

Моделирование броска двух игральных кубиков

Пример python
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]

Генерация случайного пароля из цифр

Пример python
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

Случайный выбор элемента из списка

Пример python
import random
items = ['яблоко', 'банан', 'апельсин', 'виноград', 'киви']
random_index = random.randint(0, len(items) - 1)
selected_item = items[random_index]
print(f"Случайный фрукт: {selected_item}")
Случайный фрукт: виноград

Симуляция случайного события с вероятностью

Пример python
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

Генерация случайной даты в пределах месяца

Пример python
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

Создание тестовых данных

Пример python
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

питон random.randint function comments

En
Random.randint Return a random integer N such that a <= N <= b