2012-08-05 76 views
2

我怎么会去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模块能够做到这一点吗?

回答

9

为什么不只是生成一个乘数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) 
+0

这可以返回给定r之外的值安格。 (即'7,10,100 - > 7') – kojiro 2012-08-05 19:19:27

+0

在Python 2.x的版本中,如果你把7和10作为整数,是的。这可以通过使用7.0和10.0或者只是添加'float()'强制转换来解决。在Python 3中,它工作正常。尽管如此,我将在使用Python 2.x的人员的float casts中进行编辑。 – Amber 2012-08-05 19:21:01

+0

完美.. :)有这个其他人,但他删除了他的答案..嘿 – iKlsR 2012-08-05 19:23:45

1

您将需要手动检查因子参数;随机函数不处理那个。您可以生成一个介于min/f和max/f之间的数字,然后乘以f作为最终结果。

3

功能randrange具有阶梯参数,所以如果你可以做这样的事情:

>>> 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