2016-01-22 134 views
3

所以我正在做一個小型的文本遊戲,我想要做的事情之一是從一系列變量中獲得一個隨機數。Python3 randrange給出相同的結果

出於測試目的,我已經寫了代碼看起來是這樣的:

slow_speed = random.randrange(10,25) 
medium_speed = random.randrange(26, 50) 
fast_speed = random.randrange(51, 75) 

penalty_list = [slow_speed, medium_speed, fast_speed] 

for i in range(3): 
    for penalty in penalty_list: 
     print(penalty) 

的想法是,它會在每次循環在列表3次,並給每個範圍不同的隨機數。

但是,會發生什麼是我得到相同的3個數字循環3次。我想這是因爲當我調用該函數時種子(在我的計算機上的時間)是相同的,所以我試圖添加time.sleep()和random.seed(),但這沒有幫助。

那麼我該如何解決這個問題? 謝謝!

+1

什麼是'slow_penalty','medium_penalty'和'fast_penalty'?他們似乎不是隨機產生的 – gtlambert

+0

謝謝你,我改變了這個問題。罰款也rand.range功能,這只是我粗心挑選錯誤的問題。 – Shadylamp

+1

'random.randrange()'返回* integer *,而不是每次打印時都會改變值的對象。產生更多整數(每次再次調用'random.randrange()')如果你需要新的值。 –

回答

5

您需要將變量聲明放入for循環中。這樣,每次迭代過程中都會生成隨機數。以下是可能是你在找什麼:

import random 

for i in range(3): 
    slow_speed = random.randrange(10,25) 
    medium_speed = random.randrange(26, 50) 
    fast_speed = random.randrange(51, 75) 
    penalty_list = [slow_speed, medium_speed, fast_speed] 

    for penalty in penalty_list: 
     print(penalty) 

樣本輸出

13 
31 
63 
17 
26 
61 
16 
46 
67 
3

定義你的速度爲元組的範圍,然後要求他們random.randrange。使用*解開元組對中的參數。

slow_speed = (10,25) 
medium_speed = (26, 50) 
fast_speed = (51, 75) 

penalty_list = [slow_speed, medium_speed, fast_speed] 

for i in range(3): 
    for penalty in penalty_list: 
     print(random.randrange(*penalty)) 

# Output: 
17 
43 
59 
11 
38 
61 
24 
35 
54 

還是做整個事情作爲一個列表理解:

>>> [[random.randrange(*penalty) for penalty in penalty_list] for _ in range(3)] 
[[21, 27, 73], [10, 47, 72], [10, 35, 55]] 
1
for i in range(3): 
    slow_speed = random.randrange(10,25) 
    medium_speed = random.randrange(26, 50) 
    fast_speed = random.randrange(51, 75) 
    penalty_list = [slow_speed, medium_speed, fast_speed] 
    for penalty in penalty_list: 
     print(penalty) 

你不要在每一個循環產生的隨機數,這就是原因。

2

想到使用打字機,並在鑰匙上有猴子砰砰聲。一旦錘子碰到墨帶並且信件被印在紙上,那些信件就不會再改變了。您可以重新讀取紙上的亂碼,但亂碼仍然保持不變。如果你想要不同的亂碼,請在打字機中放更多的紙張,並再次在鑰匙上敲擊猴子。

random.randrange()是那個猴子,它返回你一個int對象;這是論文。打印在一個循環的整數不會改變結果,你需要在循環每次回去都random.randrange()嘭上的按鍵

for i in range(3): 
    slow_speed = random.randrange(10,25) 
    medium_speed = random.randrange(26, 50) 
    fast_speed = random.randrange(51, 75) 

    penalty_list = [slow_speed, medium_speed, fast_speed] 

    for penalty in penalty_list: 
     print(penalty) 
+1

謝謝你的真棒解釋! – Shadylamp

相關問題