2016-04-24 399 views
0

比方說bob = 6如何創建三個總和爲特定值的隨機整數? (Python)

我想創建3個隨機整數,總和爲106(100 +無論bob的原始整數是多少,可以是10,但在這種情況下,它是6)。

我有:

from random import * 
bob = 6 
bob1 = (randint(0,100)) 
bob2 = (randint(0,100)) 
bob3 = (randint(0,100)) 
print bob1 
print bob2 
print bob3 

我可以生成一個整數,但我怎麼能確保他們的總和= 100 +原裝整數? (總共106個)。如果總和不= 106,那麼我希望腳本繼續下去,直到它使106

+0

如果'BOB = 201'?多久你會喜歡你的劇本繼續走下去,直到它成爲301? – gboffi

+0

嗨gboffi,我現在保持簡單,但是,理論上我希望腳本處理任何數字。但現在,我只是保持基本。 – BubbleMonster

回答

2

纔算第三值:

from random import randint 
bob = 6 
bob1 = randint(0, 100) 
bob2 = randint(0, min(100, 100 + bob - bob1)) 
bob3 = 100 + bob - bob1 - bob2 
print bob1 
print bob2 
print bob3 
+0

謝謝這就是我想要的。我只是在第4行添加了一個額外的)右括號。但是否則這看起來很完美。謝謝。 – BubbleMonster

0
bob1 = (randint(0,100)) 
bob2 = (randint(0,(100-bob1))) 
bob3 = 100 - (bob1 + bob2) 
0

這裏是一個通用的函數,將永遠在[0,n]中隨機生成3個數字,添加到n;由於中間值由"bob"的初始值決定,因此我們將此值和目標總數傳遞給它。該函數返回3號的元組,與鮑勃 - 初始值一起加起來目標:

import random 

def three_numbers_to_n(bob, target): 
    n = target - bob 
    a = random.randrange(0, n+1) 
    b = random.randrange(a, n+1) - a 
    c = n - a - b 
    return a, b, c 

for _ in range(5): 
    bob = 6 
    result = three_numbers_to_n(bob, 106) 
    print(bob, result, sum(result) + bob) 

輸出樣本:

6 (13, 3, 84) 106 
6 (45, 49, 6) 106 
6 (27, 2, 71) 106 
6 (44, 18, 38) 106 
6 (100, 0, 0) 106 

如果你願意,你可以random.shuffle(a, b, c)之前返回刪除第一個數字可能大於第二個數字的可預測性可能大於第三個數字。

3

的一般方法來生成加起來一定數量數字是這樣的:

import random 
bob = 6 
numbers = sorted(random.sample(range(100+bob), 2)) 
bob1 = numbers[0] 
bob2 = numbers[1] - numbers[0] 
bob3 = 100 + bob - numbers[1] 

它選擇0100 + bob之間的兩個切點和數字作爲分配所示:

enter image description here

這也將確保所有三個數字具有相同的分佈(用1m試驗模擬):

mean 34.700746 35.639730 35.659524 
std  24.886456 24.862377 24.861724 

而不是在數產生依賴性:

mean 50.050665 27.863753 28.085582 
std  29.141171 23.336316 23.552992 

而且他們的柱狀圖:

enter image description here