所以我正在制作一个小型的文字游戏,我想要做的一件事就是从一系列变量中获取一个随机数。
出于测试目的,我编写了一个代码如下:
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>
那我怎么解决这个问题呢? 谢谢!
答案 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)
你不会在每个循环中生成随机数,这就是原因。