Как получить случайное число в диапазоне с исключениями?

Например, в питоне есть функция randint(min, max), которая отдаёт случайное число в диапазоне от min до max.
Мне нужна функция, которая будет принимать массив из исключений: randint_se(min, max, exceptions), где exceptions - массив из тех числ, которые не должны попасть в диапазон. Массив exceptions может быть любой длины.
  • Вопрос задан
  • 642 просмотра
Пригласить эксперта
Ответы на вопрос 2
@bitbuff Автор вопроса
Я подумал и решил задачу. Может кому-нибудь пригодится.
import random

def randint_se(min, max, exceptions):

	possible = []
	exceptions.sort()

	for number in range(min, max+1):
		count = 0
		for exception_number in exceptions:
			if number == exception_number:
				break
			count += 1
		if count == len(exceptions):
			possible.append(number)


	return random.choice(possible)
Ответ написан
@NtropyNN
Мой вариант такой:
нужно скорректировать максимальное значение с учётом длин всех исключённых диапазонов, получить случайное число для обновлённого диапазона, а затем применяя список исключённых диапазонов скорректировать значение.
Пример: задано вернуть число от 1 до 6 (игральная кость), но при этом число 4 считается запретным.
Решение: получать случайное число от 1 до 5 и если оно больше и равно 4 плюсовать к результату 1 (длину исключенного диапазона).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы