在python 3中,如何对随机种子使用randrange()?
所以,我在课堂上被要求使用特定的随机种子237。但我不知道如何正确地实施它。例如,这是我的代码。在Python3中。 在这个例子中,我基本上是掷m个边数为k的骰子,并试图返回一个长度为m的元组在python 3中,如何对随机种子使用randrange()?,python,python-3.x,random,Python,Python 3.x,Random,所以,我在课堂上被要求使用特定的随机种子237。但我不知道如何正确地实施它。例如,这是我的代码。在Python3中。 在这个例子中,我基本上是掷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.ran
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)
我能解释一下错误吗:(非常简单:在第二行中,您正在创建一个名为
rng
的对象,它是random.seed(237)的返回值)
。碰巧random.seed
总是返回None
。因此,在代码的后面,当您尝试rng.randrange
时,Python将查找rng
对象的名为randrange
的属性。但是rng
对象是None
,它没有range>代码>属性
你真正的意思只是random.randrange(1,k+1)
,而不是rng.randrange(1,k+1)
random.seed
返回None
,所以在
rng=random.seed(237)
rng
设置为None
。然后您尝试调用
None.randrange(1,k+1)
在你的功能中,这显然是行不通的
另外,print
函数返回None
,因此
return print(tuple(L))
将返回None
。您不希望这样
这是您的代码的修复版本
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
循环来执行所需数量的掷骰子,这比在循环和“手动”时使用要好用x+=1
计算转鼓数。我们实际上并没有在该循环中使用x
的值,在Python中,在这种情况下使用\uu
作为循环变量的名称是一种常见的约定,即
for _ in range(m):
FWIW,我们可以使用生成器表达式以紧凑的方式编写此函数:
def throwDice(m, k):
return tuple(random.randrange(1, k+1) for _ in range(m))
在某些情况下,我们需要多个独立的随机数流。我们可以通过创建random
类的实例轻松做到这一点;该类的构造函数将seed作为可选参数
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)
使用Python3.6可以使用random.choices
并保存显式循环ithink@Chris_Rands是的,但由于这是家庭作业,OP可能需要使用randrange
。TBH,我一直忘记选项存在。:)对于这项任务,我可能会使用randint(1,k)
。种子基本上是告诉您的随机数生成器如何成为随机数(使用相同的种子,它将始终拾取相同的数字)。你想要的是这样称呼它:die=random.randrange(1,k+1)
Ok,那么如果我导入种子,我就不必在代码中引用它了?我可以使用random.randrange()?很抱歉,响应太晚,但是可以。您可以通过设置种子,然后询问随机数(或范围)来自己尝试。如果随后将种子重新设置为相同的值,并要求另一个随机数(或范围),则该值应相同。
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)