2016-01-22 121 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

相关问题