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模块能够做到这一点吗?

4

3 回答 3

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)
于 2012-08-05T19:12:24.293 回答
3

函数 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
于 2012-08-05T19:17:45.073 回答
1

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

于 2012-08-05T19:12:10.857 回答