你如何在一定数量的领域分发一个数字?

时间:2018-01-15 00:09:04

标签: python

好的,让我说我有数字,100,我想随机将它分成12组,所有组的总数等于100.我怎么做,我写了一段代码但是它有一个缺陷。

from random import randint
total = 100
while total < 101:
    for i in range(0,9):
        num = randint(1,total)
        print(i,"|","*"*num)
        total -= num
if total <= 0:
    for j in range (i,10):
        print(j,"|","*"*total)

当你运行它时,一旦总数等于零或更少,它就会崩溃,所以它不会发布完整的结果,我不知道如何解决这个问题。我是Python的新手,所以我的知识有限。

2 个答案:

答案 0 :(得分:1)

将数字 n 随机分割成 k 组在数学上等效于随机放置 k -1分频器。因此,我会做这样的事情:

from random import randint
def split_randomly(n,k):
    dividers = set() # guarantee no duplicate dividers
    while len(dividers) < k-1:
        dividers.add(randint(1,n-1))
    dividers = [0] + sorted(dividers) + [n]
    return [dividers[i+1] - dividers[i] for i in range(len(dividers)-1)]

答案 1 :(得分:0)

对于正确的随机拆分,您可以使用random.sample。以下收集来自[1..n]和k-1以及0的{​​{1}}随机分割点的样本,并返回其成对差异的n

list