random.choice()有两个参数?

时间:2017-04-13 09:45:30

标签: python random arguments

我在下面的掷骰子功能中犯了一个简单的错误:

import random

def rollDie():
    return random.choice(1,2,3,4,5,6)

print(rollDie())

我知道我需要将序列作为列表或元组传递,但我对以下错误消息更加好奇。

Traceback (most recent call last):
  File "Lecture 5.2 -- stochastic - die roll example.py", line 8, in <module>
    print(rollDie())
  File "Lecture 5.2 -- stochastic - die roll example.py", line 6, in rollDie
    return random.choice(1,2,3,4,5,6)
TypeError: choice() takes 2 positional arguments but 7 were given

消息说“choice()需要2个位置参数,但7个被给出”。

但是文档只显示了一个参数(序列)。 https://docs.python.org/3/library/random.html

第二个论点是什么(在我的情况下是第七个)?这是种子(我没有指定的种子是由时钟初始化的吗?)

3 个答案:

答案 0 :(得分:8)

choice()Random()模块维护的隐藏random实例上的方法。因为它是一个方法,所以它有两个参数:self和可以从中进行选择的iterable。

来自module documentation

  

此模块提供的函数实际上是random.Random类的隐藏实例的绑定方法。

random module source code

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]

答案 1 :(得分:0)

根据我的经验: random.sample比random.choice更好。

答案 2 :(得分:0)

要修复代码,请执行以下操作:

import random
options=[1,2,3,4,5,6]
def rollDie():
      return random.choice(options)


#whenever you use choice you must put the options in a list since choice only takes one argument.

print(rollDie())