choice()接受了2个位置参数,但给出了3个,但我肯定给出了2个

  • 本文关键字:2个 3个 参数 位置 choice python
  • 更新时间 :
  • 英文 :


我正在模拟Monty-Hall问题,这个片段是交换部分。

import random
i = 0
eliminated = 0
while i < 10:
i += 1
randFirstChoice = random.randint(1,3)
if randFirstChoice == 1:
eliminated += random.choice(2, 3)
elif randFirstChoice == 2:
eliminated += random.choice(1, 3)
elif randFirstChoice == 3:
eliminated += random.choice(1, 2)
print(eliminated)

每当我运行这个,我得到错误

TypeError:choice((接受2个位置参数,但有3个给定了

它为错误提供的行号是3个条件语句。我很困惑,因为我认为random.choice会让我在两个数字之间随机选择,据我所知,这就是我试图做的

random.choice实际上是单个共享random.Random实例的绑定方法。与random.Random方法名称匹配的random的顶级函数都是这样生成的;它节省了两次重新实现相同功能的时间。

这两个参数是self(由于它是预绑定的,所以隐式传递(和可供选择的序列。您传递了self(隐式(和两个非序列参数(显式(。

如果您想在两个值之间进行选择,请将它们作为tuple传递,例如:

import random
i = 0
eliminated = 0
while i < 10:
i += 1
randFirstChoice = random.randint(1,3)
if randFirstChoice == 1:
eliminated += random.choice((2, 3))  # Extra parens for a tuple
elif randFirstChoice == 2:
eliminated += random.choice((1, 3))  # Extra parens for a tuple
elif randFirstChoice == 3:
eliminated += random.choice((1, 2))  # Extra parens for a tuple
print(eliminated)

put您的random.choice在输入中获取一个序列。

import random
i = 0
eliminated = 0
while i < 10:
i += 1
randFirstChoice = random.randint(1,3)
if randFirstChoice == 1:
eliminated += random.choice([2, 3])
elif randFirstChoice == 2:
eliminated += random.choice([1, 3])
elif randFirstChoice == 3:
eliminated += random.choice([1, 2])
print(eliminated)

random.choice是一个类方法。其第一参数(self(已经被设置为函数的第一参数。

以下是后端(random.py(中choice函数的代码

def choice(self, seq):
"""Choose a random element from a non-empty sequence."""
try:
i = self._randbelow(len(seq))
except ValueError:
raise IndexError('Cannot choose from an empty sequence') from None
return seq[i]

我认为您误解了该方法的使用。random.choice()只取一个参数,该参数必须是列表。尝试random.choice(['a','b','c'])。如果你想要一个范围内的数字,你可以使用random.randint(2,30)

相关内容

最新更新