在python中如何将一个数分成12个随机数,所有随机数和等于numb

2024-03-27 16:37:40 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好,我有一个问题,包含任何一个数字(如-167)将被分成12个随机数,12个随机数的和应该是原始数,大于零,整数

为此,我写了一个代码:

a = 167
n = 12
out = diff([0,sort(randperm(a-1,n-1)),a])

这里有个错误

name 'diff' is not defined

另一种方式:

^{pr2}$

注意:这两个代码都不工作,所以请告诉我怎么做

请帮我拿……谢谢


Tags: 代码nameis错误方式notdiff数字
2条回答

这应该行。在

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

编辑:对于float,您不必为下一个值节省空间(对于非负整数而不是正整数,也是如此),因此它看起来会有些不同。基本上,您只需从表达式中删除-n+idx项,因为您不再需要分配n-idx更多的片段>;=1。在

^{pr2}$
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)

相关问题 更多 >