Сгенерируйте случайное число, попадающее в кратный диапазон
Как я буду генерировать случайное целое число в python, которое есть случайный, но попадает в таблицу умножения (таблица умножения) диапазон как таковой и определяется значением, которое я указываю?
Пример.Предположим, я хочу сгенерировать случайное число от 10 до 100, но оно должно быть кратно 7. Возможные возвращаемые значения могут быть 14, 28, 49, 77 и т. д.
Макет функции может выглядеть следующим образом:
def gen_random(f, min, max):
#generate random number between min and max that is a multiple of fac
Является ли модуль Python random способным делать это?
3 ответов:
Почему бы просто не сгенерировать множитель
fac, который даст вам число между вашими границами?import math import random def rand_multiple(fac, a, b): """Returns a random multiple of fac between a and b.""" min_multi = math.ceil(float(a) / fac) max_multi = math.floor(float(b) / fac) return fac * random.randint(min_multi, max_multi)
Функция randrange имеет параметр step, так что если вы можете сделать что-то вроде этого:
>>> min = 7 >>> max = 14 + 1 >>> randrange(min, max, 7) 14 >>> randrange(min, max, 7) 7Но:
>>> min = 6 >>> randrange(min, max, 7) 13Итак, вам нужно сделать что-то вроде этого:
min += 7 - min % 7 max = max - max % 7 + 1
Вам нужно будет вручную проверить параметр factor; случайная функция не обрабатывает его. Вы можете сгенерировать число между min/f и max / f, а затем умножить на f в качестве конечного результата.
Comments