<p>它不是特别有用,因为我已经过度使用了Numpy,但我会分享,因为它是相关的</p>
<pre><code>import numpy
import random
# apple, bannana, grapes, guava, melon, pear
fruits = numpy.array([100, 150, 175, 200, 230, 247])
# Bill, Bob, Dan, Fred, Joe
ratios = numpy.array([21, 7, 32, 13, 27])
# Original fruit amount for each worker: 0
worker_fruits = numpy.zeros((5, 6), dtype=int)
worker_lucky = numpy.zeros((5, 6), dtype=float)
# For each worker with his ratio
for worker, lucky, ratio in zip(worker_fruits, worker_lucky, ratios):
# Give him fruits, storing partials as weighting
to_give = (ratio * fruits) / 100
lucky += to_give % 1
worker += to_give
# Calculate how much we have left over
spares = fruits - worker_fruits.sum(axis=0)
# Share it out in a weighted distribution
for fruit, lucky, numspare in zip(worker_fruits.transpose(), worker_lucky.transpose(), spares):
if numspare:
indexes = numpy.arange(len(fruit))
add_to = numpy.random.choice(indexes, replace=False, size=numspare, p=lucky/numspare)
fruit[add_to] += 1
# Our results!
worker_fruits
#>>> array([[21, 31, 36, 42, 49, 51],
#>>> [ 7, 11, 12, 14, 16, 18],
#>>> [32, 48, 56, 64, 74, 79],
#>>> [13, 19, 23, 26, 29, 32],
#>>> [27, 41, 48, 54, 62, 67]])
# Proof it's perfectly shared
fruits - worker_fruits.sum(axis=0)
#>>> array([0, 0, 0, 0, 0, 0])
</code></pre>