擅长:python、mysql、java
<p>这应该行。在</p>
<pre><code>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)
</code></pre>
<p>请注意,这些数字不是独立的;任何时候添加一个像<code>THE n VALUES MUST TOTAL a</code>这样的约束,就会消除一些随机性。在这里,分布中后期的数字很可能比之前的数字要小,直到最后一个数字被期望再次平均。如果你不喜欢这个趋势,你可以<code>shuffle()</code>结果列表,<code>pieces</code>。在</p>
<p>编辑:对于float,您不必为下一个值节省空间(对于非负整数而不是正整数,也是如此),因此它看起来会有些不同。基本上,您只需从表达式中删除<code>-n+idx</code>项,因为您不再需要分配<code>n-idx</code>更多的片段>;=1。在</p>
^{pr2}$