random.choice() 有两个参数?

问题描述 投票:0回答:4

我在以下掷骰子函数中犯了一个简单的错误:

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

第二个参数(或者在我的例子中是第七个)是什么?这是种子吗(我没有指定,所以是由时钟初始化的)?

python random arguments
4个回答
8
投票

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

来自模块文档

该模块提供的函数实际上是

random.Random
类的隐藏实例的绑定方法。

random
模块源代码:

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
投票

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

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())

0
投票

根据我的经验: random.sample 是比 random.choice 更好的解决方案。


0
投票

✨您必须以列表元组的形式给出您的值:

列表:

import random

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

print(rollDie())

元组:

    import random

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

print(rollDie())

此错误是因为代码认为您将这些数字中的每一个作为参数给出。 选择是一个内置函数,它从数据迭代器中随机选择数据。✨🔥

© www.soinside.com 2019 - 2024. All rights reserved.