Python

Случайное число в диапазоне Python

Случайное число в диапазоне в Python чаще всего получают через модуль random. Для целых чисел подходят randint() и randrange(), для дробных — uniform(), а для случайного выбора из списка — choice()

Главная ловушка для новичка: разные функции по-разному работают с границами диапазона. У randint(1, 10) число 10 может выпасть, а у randrange(1, 10) число 10 уже не входит в диапазон

По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы

По этой теме полезно отдельно посмотреть Аннотации типов для декораторов в Python, чтобы расширить контекст и сравнить подходы

Целое число через randint

import random

number = random.randint(1, 10)
print(number)

Этот код выведет целое число от 1 до 10 включительно

randint(a, b) подходит, когда вам нужен понятный человеческий диапазон: от одного значения до другого, включая обе границы

Несколько случайных чисел

import random

for _ in range(5):
    print(random.randint(1, 6))

Так можно имитировать пять бросков кубика. Переменная _ показывает, что номер повторения нам не нужен

Если нужно сохранить числа в список:

import random

numbers = []

for _ in range(10):
    numbers.append(random.randint(100, 999))

print(numbers)

randrange и отличие от randint

randrange() работает похоже на range(): правая граница не включается

import random

number = random.randrange(1, 10)
print(number)

Такой код вернет число от 1 до 9

Если нужен шаг, randrange() удобнее randint()

import random

even_number = random.randrange(2, 21, 2)
print(even_number)

Здесь выпадет случайное четное число от 2 до 20

Дробное число в диапазоне

Для дробного числа используйте uniform()

import random

price = random.uniform(10, 20)
print(price)

В выводе будет дробное число между 10 и 20

Если нужен красивый результат с двумя знаками:

import random

price = random.uniform(10, 20)
print(round(price, 2))

round() округляет число для вывода, но не делает его денежным типом данных. Для реальных финансовых расчетов лучше использовать Decimal

Случайный элемент списка

Когда нужен не диапазон чисел, а случайный вариант из набора, используйте choice()

import random

colors = ['red', 'green', 'blue']
color = random.choice(colors)

print(color)

Так удобно выбирать случайный вопрос, промокод, цвет, имя тестового пользователя или уровень сложности

Если список пустой, choice() выдаст ошибку. Поэтому в рабочем коде лучше проверять данные

import random

items = []

if items:
    print(random.choice(items))
else:
    print('список пуст')

Перемешать список

shuffle() меняет список на месте

import random

cards = ['A', 'K', 'Q', 'J']
random.shuffle(cards)

print(cards)

Если нужно получить перемешанную копию и не трогать исходный список, используйте sample()

import random

cards = ['A', 'K', 'Q', 'J']
shuffled = random.sample(cards, len(cards))

print(cards)
print(shuffled)

Повторяемый результат через seed

Иногда случайность должна быть повторяемой: например, в тестах или учебных примерах

import random

random.seed(42)

print(random.randint(1, 10))
print(random.randint(1, 10))
print(random.randint(1, 10))

При одинаковом seed последовательность будет одинаковой

Не используйте seed() для безопасности. Он нужен для воспроизводимости, а не для защиты токенов или паролей

Когда нужен secrets

Модуль random не подходит для паролей, токенов, кодов подтверждения и других чувствительных данных

Для таких задач используйте secrets

import secrets

code = secrets.randbelow(900000) + 100000
print(code)

Этот пример генерирует шестизначное число от 100000 до 999999

Для одноразового токена:

import secrets

token = secrets.token_hex(16)
print(token)

Мини-проект: угадай число

import random

secret = random.randint(1, 10)
answer = int(input('Угадайте число от 1 до 10: '))

if answer == secret:
    print('угадали')
else:
    print(f'нет, было число {secret}')

Это короткий пример, но в нем есть реальная логика: генерация, ввод пользователя, сравнение и вывод результата

Для тренировки можно добавить три попытки:

import random

secret = random.randint(1, 10)

for attempt in range(3):
    answer = int(input('Ваш вариант: '))

    if answer == secret:
        print('угадали')
        break
    elif answer < secret:
        print('число больше')
    else:
        print('число меньше')
else:
    print(f'попытки закончились, было число {secret}')

Частые ошибки

  • забывать, что randint(1, 10) включает 10
  • ожидать, что randrange(1, 10) включает 10
  • использовать random для паролей и токенов
  • вызывать random.seed() в рабочем коде без причины
  • выбирать элемент из пустого списка
  • путать shuffle() и sample()
  • округлять дробные числа и думать, что это решает денежные расчеты

Для целого случайного числа от a до b включительно используйте random.randint(a, b)

Для диапазона с невключенной правой границей и шагом используйте random.randrange()

Для дробного числа подходит random.uniform(), для выбора элемента — random.choice(), для безопасных токенов — secrets

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x