你所要求的是不隨機的;事實上,它是相當結構化的。隨機數據的要點是它沒有結構化:你不能說什麼值將是什麼,只有他們將平均。
,您仍然可以做你想做的,不過:只要指定你想你的號碼落入範圍。
>>> def random_function(*args):
... n = sum(args)
... bottom = 0
... for m in args:
... for _ in range(m):
... yield random.uniform(bottom, bottom + m/n)
... bottom += m/n
...
>>> list(random_function(6,3,1))
[0.1849778317803791, 0.2779140519434712, 0.08380168147928498, 0.5477412922676888
, 0.5158697440011519, 0.5535466918038039, 0.8046993690361345, 0.714614514522802,
0.7102988180048052, 0.9608096335125095]
>>> list(random_function(6,3,1))
[0.29313403848522546, 0.5543469551407342, 0.14208842652528347, 0.344464024804118
7, 0.3168266508239002, 0.5956620829410604, 0.673021479097414, 0.7141779120687652
, 0.7783099010964684, 0.9103924993423906]
說明:
鑑於(6,3,1)
,解決他們的總和(10
)。我們需要0到6/10之間的六個數字,6/10和6/10之間的三個數字+3/10,以及6/10 + 3/10和6/10 + 3/10 + 1/10之間的一個數字。我們可以通過調用
random.uniform(0, 6/10) six times,
random.uniform(6/10, 9/10) three times, and
random.uniform(9/10, 1) once.
即使是最好的RNG也不會總是給你想要的東西。如果您想要某個給定範圍內的數字,請調用該範圍內的RNG。均勻分佈是隨着生成的數字接近無限而發生的。預計10個隨機數的一致性是你不能總是依靠的。 –
只有在極限內才能保持一致;如果它總是統一的,那不會是隨機的,是嗎? –
你應該更好地解釋你想要做的事情。如果你想要一致性,你不需要隨機性。使用隨機函數,你真的不介意結果,提供一個範圍。在第一個例子中,你需要兩組不同的隨機數。 –