Python 生成一个属于多个范围的随机数

Python 生成一个属于多个范围的随机数,python,random,Python,Random,我如何在python中生成一个随机整数,该整数是随机的,但本质上属于乘法表(times table)范围,由我指定的值决定 示例。假设我想生成一个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 >>> m

我如何在python中生成一个随机整数,该整数是随机的,但本质上属于乘法表(times table)范围,由我指定的值决定

示例。假设我想生成一个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
>>> min = 7
>>> max = 14 + 1
>>> randrange(min, max, 7)
14
>>> randrange(min, max, 7)
7
min += 7 - min % 7
max = max - max % 7 + 1

Python的
random
模块是否能够做到这一点?

您需要手动检查factor参数;随机函数不能处理这个问题。您可以生成一个介于最小值/f和最大值/f之间的数字,然后乘以f作为最终结果。

为什么不生成一个介于边界之间的数字的
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有一个步长参数,因此如果您可以执行以下操作:

def gen_random(f, min, max):
    #generate random number between min and max that is a multiple of fac
>>> min = 7
>>> max = 14 + 1
>>> randrange(min, max, 7)
14
>>> randrange(min, max, 7)
7
min += 7 - min % 7
max = max - max % 7 + 1
但是:

所以你需要这样做:

def gen_random(f, min, max):
    #generate random number between min and max that is a multiple of fac
>>> min = 7
>>> max = 14 + 1
>>> randrange(min, max, 7)
14
>>> randrange(min, max, 7)
7
min += 7 - min % 7
max = max - max % 7 + 1

这可以返回给定范围之外的值。(即
7,10100->7
)在Python2.x的除法中,如果将7和10作为整数输入,则是。这可以通过使用7.0和10.0或仅添加
float()
cast()来修复。在Python3中,它工作得很好。不过,我将为使用Python 2.x的用户编辑浮点类型转换。完美:)还有另外一个人,但他删除了他的答案。。当有人读到这个答案时,他/他会想,我想知道另一个答案是什么。