Python3 randrange给出了相同的结果

Python3 randrange给出了相同的结果,python,python-3.x,random,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): f

所以我在做一个小的文本游戏,我想做的一件事就是从一系列变量中得到一个随机数

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

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次。我想这是因为当我调用函数时,seed(我计算机上的时间)是相同的,所以我尝试添加time.sleep()和random.seed(),但没有帮助

那么我该如何解决这个问题呢?
谢谢

您需要将变量声明放入
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

将速度定义为元组范围,然后对其调用
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]]

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

想象一下使用打字机,然后在按键上发出一声猴子的砰砰声。一旦锤子敲到墨水带上,字母印在纸上,这些字母就不会再改变了。你可以在纸上重新阅读由此产生的胡言乱语,但胡言乱语将保持不变。如果你想听到不同的胡言乱语,在打字机里放更多的纸,然后让猴子再次敲击键盘

random.randrange()
就是那个猴子,它会返回一个
int
对象;那是报纸。在循环中打印这些整数不会改变结果,您需要返回并在循环中每次按下键:


什么是
慢速处罚
中等处罚
快速处罚
?它们似乎不是随机生成的谢谢,我改变了问题。惩罚也是rand.range函数,只是我不小心选择了错误的函数来回答问题。
random.randrange()
返回一个整数,而不是一个每次打印时都会改变值的对象。如果需要新值,请生成更多整数(每次再次调用
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)
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)