Сгенерируйте случайное число, попадающее в кратный диапазон



Как я буду генерировать случайное целое число в 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 способным делать это?

572   3  

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

    Ничего не найдено.