Python3 randrange给出相同的结果

时间:2016-01-22 09:27:02

标签: python python-3.x random

所以我正在制作一个小型的文字游戏,我想要做的一件事就是从一系列变量中获取一个随机数。

出于测试目的,我编写了一个代码如下:

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(),但这没有帮助。 / p>

那我怎么解决这个问题呢? 谢谢!

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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]]

答案 2 :(得分:2)

想想使用打字机,并在钥匙上敲打猴子。一旦锤子撞到墨带并且字母已经印在纸上,那些字母就不会再改变了。你可以在纸上重新阅读由此产生的乱码,但是胡言乱语会保持不变。如果你想要不同的胡言乱语,可以在打字机上放更多纸张,让猴子再次敲击钥匙。

random.randrange()就是那只猴子,它会返回一个int个对象;那篇论文。在循环中打印这些整数不会改变结果,您需要返回并且每次在循环中>敲击

random.randrange()

答案 3 :(得分: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)

你不会在每个循环中生成随机数,这就是原因。