2017-09-26 39 views
0

我對編碼很陌生,但我已經戀愛了。隨機分配變量範圍中的唯一值

我正在做一個(超)雄心勃勃的項目,但我需要一些幫助。

我想(在Python中)爲9個變量(字母ai)分配9個值(1-9),我不知道如何做到這一點,雖然研究教會了我如何爲它們分配隨機數這些價值觀,我沒有設法讓他們不重疊(除了純粹的運氣)。

的我想隨機生成

例如: A = 7,B = 8,C = 4,d = 6,E = 9,F = 1,G = 2,H = 3,I = 5

+0

不要生成一堆個體隨機數。 *洗牌*。 – user2357112

+1

你看過'random.sample'嗎? 'random.sample(range(1,10),9)' –

+2

不要使用一堆變量來保存你的隨機值。使用數據結構,如列表。正如@cᴏʟᴅsᴘᴇᴇᴅ所說,這將允許你使用'random.sample'之類的東西,它看起來像你想要的。 –

回答

0

如果你想要去的洗牌路線,你可以使用random.shuffle。不過,我建議更好的東西:random.sample

a, b, c, d, e = random.sample(range(1, 6), 5) 

如果你堅持random.shuffle,你需要確保你轉換rangelist,因爲random.shuffle作品上只列出,並range不是list類型的python3.x(本解釋你的TypeError;這個限制不存在與random.sample)。

data = list(range(1, 6)) 
random.shuffle(data) 
a, b, c, d, e = data 
+0

我自己會傾向'shuffle',因爲它處理的是列表,並且比'sample'更快。在某些時候,你需要支付創建變量賦值列表的代價,所以你最好儘可能快速和高效地使用內存(假設代碼仍然清晰)。我確信我錯過了某些東西。你能否詳細說明爲什麼樣品更好? –

+0

@MattHardcastle更簡潔;不必擔心列表轉換 - 我假設你已經注意到'範圍'由於b/w python版本的不同而導致了OP的問題。此外,如果您不想隨便洗牌,或者首先創建它,則不需要洗牌。 –

0

歡迎來到Python世界!您可以通過使用range創建1到9的列表來完成隨機變量分配。用random.shuffle將該列表隨機清空。然後做你的變量分配。下面是一些代碼來說明:

import random 
one_through_five = list(range(1, 6)) 
# shuffle one_through_five in place 
random.shuffle(one_through_five) 
a, b, c, d, e = one_through_five 
print(a, b, c, d, e) 
+0

感謝這個明確的答案,不幸的是,當我複製粘貼到我的代碼並根據我的喜好調整它,它不起作用。但其中一個錯誤似乎發生在'import.random'「文件」我想是。 https://gyazo.com/908110e841da57ddac4879e635a98abf https://gyazo.com/84ce599a044d746472c063614f783b4a –

+0

^Oh和由i。從A-I(10個值)變爲A-E(5個值) –

+0

我已修正示例的方式。當我編寫它時我並沒有考慮python3,並假定範圍的輸出是一個列表。它在python2中,但不在python3中。這個例子現在應該工作。 (我現在都測試過了。) –