我在随机模块中遇到random.choice
的问题。所以这里有一个漂亮的代码块:
for trap in range(11):
leftorright = raw_input("")
if leftorright == "left" or "right":
leftchoice = random.choice(True, False)
if leftchoice:
print "You don't feel anything on your legs, so you think you're okay."
else:
print "You feel a sharp pain on your %s leg." %(random.choice("left", "right"))
else:
print sorrycommand
所以这里的问题是两个random.choice
个实例(leftchoice = random.choice(True, False)
和print "You feel a sharp pain on your %s leg." %(random.choice("left", "right"))
)给了我这个错误:
Traceback (most recent call last):
File "main.py", line 408, in <module>
startmenuchoice()
File "main.py", line 404, in startmenuchoice
room7()
File "main.py", line 386, in room7
leftchoice = random.choice(True, False)
TypeError: choice() takes exactly 2 arguments (3 given)
现在,在这里走向真实:TypeError: choice() takes exactly 2 arguments (3 given)
它在错误中说明了 3 参数,但是如果你看一下错误和代码,那么显然只有 2 给出的参数(需要适当数量的参数)。有人可以帮帮我吗?
附注:
答案 0 :(得分:1)
random.choice
没有多个参数;它需要一个序列来从中选择一个值。
leftchoice = random.choice([True, False])
random
模块定义了一个类Random
,它封装了一个随机数生成器。您创建一个实例,使用可选的种子来初始化它,然后调用其方法来获取各种随机值。
gen = random.Random(2382948)
x = gen.choice([True, False])
这非常适合测试,因为您可以使用相同的种子创建可重现的随机序列。但是,在一般使用中,您可能不关心种子并对某些默认种子感到满意(此处,基于os.urandom
返回的值的值)。为方便该用例,random
模块在导入时创建了Random
的模块级实例:
_inst = Random()
并为该实例的方法创建一堆模块级别名:
...
choice = _inst.choice
所以random.choice
,而不是一个接受一个序列参数的函数,真的一个绑定方法,其底层非绑定方法有两个参数(一个实例和一个序列),因此只需要一个。 (请记住_inst.choice([True, False])
解析为Random.choice(_inst,[True,False])`。)
您看到的random.choice(True, False)
错误消息是由于您实际上正在尝试调用Random.choice
,定义为
def choice(self, seq):
...
为_inst.choice(True, False)
或(Random.choice(_inst, True, False)
),现在应该很清楚,你有一个参数太多了。