from random import randint
a = 167
n = 12
assert a >= n >= 1
pieces = []
for idx in range(n-1):
# Number between 1 and a
# minus the current total so we don't overshoot
# minus 1 for each number that hasn't been picked
# so they can all be nonzero
pieces.append(randint(1,a-sum(pieces)-n+idx))
pieces.append(a-sum(pieces)
请注意,这些数字不是独立的;任何时候添加一个像THE n VALUES MUST TOTAL a这样的约束,就会消除一些随机性。在这里,分布中后期的数字很可能比之前的数字要小,直到最后一个数字被期望再次平均。如果你不喜欢这个趋势,你可以shuffle()结果列表,pieces。在
def num_pieces(num,lenght):
ot = list(range(1,lenght+1))[::-1]
all_list = []
for i in range(lenght-1):
n = random.randint(1, num-ot[i])
all_list.append(n)
num -= n
all_list.append(num)
return all_list
num_pieces(167,12)
这应该行。在
请注意,这些数字不是独立的;任何时候添加一个像
THE n VALUES MUST TOTAL a
这样的约束,就会消除一些随机性。在这里,分布中后期的数字很可能比之前的数字要小,直到最后一个数字被期望再次平均。如果你不喜欢这个趋势,你可以shuffle()
结果列表,pieces
。在编辑:对于float,您不必为下一个值节省空间(对于非负整数而不是正整数,也是如此),因此它看起来会有些不同。基本上,您只需从表达式中删除
^{pr2}$-n+idx
项,因为您不再需要分配n-idx
更多的片段>;=1。在相关问题 更多 >
编程相关推荐