Python 生成一个属于多个范围的随机数
我如何在python中生成一个随机整数,该整数是随机的,但本质上属于乘法表(times table)范围,由我指定的值决定 示例。假设我想生成一个10到100之间的随机数,但它应该是7的倍数。可能的返回值可以是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
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的用户编辑浮点类型转换。完美:)还有另外一个人,但他删除了他的答案。。当有人读到这个答案时,他/他会想,我想知道另一个答案是什么。