gpt4 book ai didi

python - 如何在 python 3 中对随机种子使用 randrange() ?

转载 作者:行者123 更新时间:2023-11-30 22:36:04 25 4
gpt4 key购买 nike

所以,我在类里面被要求使用特定的随机种子 237。但我不知道如何正确实现它。例如,这是我的代码。 在 python 3 中。在这个例子中,我基本上扔了 m 个边数为 k 的骰子,并尝试返回 m 长度的元组。

import random
rng=random.seed(237)
# create random number generator

def throwDice(m, k):
x = 0
L = []
while x < m :
die = rng.randrange(1,k+1)
L.append(die)
x+=1
return print(tuple(L))
throwDice(11,5)

然而,命令提示符仍然显示错误

die = rng.randrange(1,k+1)
AttributeError: 'NoneType' object has no attribute 'randrange'`

我可以得到关于问题的解释吗:(

最佳答案

random.seed 返回 None,因此在

rng=random.seed(237)

rng 设置为 None。然后你尝试调用

None.randrange(1,k+1)

在你的函数中,显然这是行不通的。

此外,print 函数返回 None,因此

return print(tuple(L)) 

将返回。你不希望这样。

这是代码的修复版本。

import random

random.seed(237)

# create random number generator
def throwDice(m, k):
L = []
for x in range(m):
die = random.randrange(1, k+1)
L.append(die)
return tuple(L)

print(throwDice(11, 5))

输出

(5, 4, 2, 2, 4, 1, 2, 5, 4, 5, 1)

在 Python 2 上,您将得到以下输出:

(4, 5, 5, 4, 1, 1, 4, 5, 3, 3, 1)

我使用了 for 循环来执行所需的骰子掷骰次数,这比使用 while 循环和使用 “手动”计算掷骰数要好>x += 1。我们实际上并没有在该循环中使用 x 的值,Python 中的常见约定是在这种情况下使用 _ 作为循环变量的名称,即,

for _ in range(m):

FWIW,我们可以使用生成器表达式以紧凑的方式编写此函数:

def throwDice(m, k):
return tuple(random.randrange(1, k+1) for _ in range(m))

在某些情况下,我们需要多个独立的随机数流。我们可以通过创建 Random 类的实例轻松做到这一点;该类的构造函数将种子作为可选参数。

import random

# Create a random number generator, and seed it
myrandom = random.Random(237)

def throwDice(m, k):
L = []
for _ in range(m):
die = myrandom.randrange(1, k+1)
L.append(die)
return tuple(L)

关于python - 如何在 python 3 中对随机种子使用 randrange() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44326756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com