2011-05-22 18 views
1

嘗試使這部分Python代碼重複,直到它獲得三個不同的結果。這不是實際的代碼,只是一個簡單的版本,可以做同樣的事情。循環一組if/else語句,直到列表變量在Python 3中具有三個唯一值3

roll = random.randint(1,100) 
if roll < 10: 
    name += "alpha" 
elif roll < 37: 
    name += "bravo" 
elif roll < 50: 
    name += "charlie" 
elif roll < 89: 
    name += "delta" 
else: 
    name += "echo" 
print(name) 

基本上,我想這個代碼段,不斷重複,直到[名]有三個不同的值,然後我想輸出列出一個新行的所有三個值,每個。我不確定要做到這一點的最佳方法是什麼。感謝您的任何幫助

編輯:在我的實際代碼中,每個數字的範圍並不是均勻分佈的。我編輯了上面的內容來反映這一點。由於在獲得這五個可能的結果的機會是不同的,random.sample將無法正常工作(除非可以格式化爲每個結果不同的賠率)

+1

'name'是不是列表。你需要使用一個列表。 – 2011-05-22 22:18:07

+0

http://stackoverflow.com/questions/352670/weighted-random-selection-with-and-without-replacement並關注鏈接http://stackoverflow.com/questions/2140787/select-random-k-elements - 從 - 一個列表,其元素 - 具有權重 – 2011-05-23 13:19:56

回答

2

在這個例子中,我應該這樣做:

import random 
name = ["alpha", "bravo", "charlie", "delta", "echo"] 
name = "\n".join(random.sample(name, 3)) 
1

製作一個列表,然後循環,直到您有三個獨特的項目。

values = [] 
while len(values) != 3: 
    index = random.randrange(100) 
    value = determine_value_for_index(index) 
    if value not in values: 
     values.append(value) 
1

如果您需要唯一的值,那麼set類型就是您所追求的。

name = set() 
while len(name)<3: 
    roll = random.randint(1,100) 
    if roll < 10: name.add("alpha") 
    elif roll < 37: name.add("bravo") 
    elif roll < 50: name.add("charlie") 
    elif roll < 89: name.add("delta") 
    else: name.add("echo") 
for n in name: print n 
0

random.sample有什麼問題?

names = ["alpha", "bravo", "charlie", "delta", "echo"] 

random.sample(names, 3) # ['delta', 'echo', 'bravo'] 
random.sample(names, 3) # ['echo', 'charlie', 'delta'] 
random.sample(names, 3) # ['bravo', 'charlie', 'delta'] 

編輯:

name = ''.join(random.sample(names, 3)) # 'deltabravocharlie'