【发布时间】:2021-02-22 13:20:02
【问题描述】:
当我输入这个时:
rand_num = random.choice(1, 101)
它显示:
TypeError: choice() takes 2 positional arguments but 3 were given
这些都是放在函数中的,我不明白为什么这么说。
【问题讨论】:
标签: python python-3.x random
当我输入这个时:
rand_num = random.choice(1, 101)
它显示:
TypeError: choice() takes 2 positional arguments but 3 were given
这些都是放在函数中的,我不明白为什么这么说。
【问题讨论】:
标签: python python-3.x random
random.choice() 的签名是:
choice(seq)
你传递给它一个序列,例如:
>>> random.choice([1, 2, 6, 8, 9])
2
range 对象也有效,如此处的其他答案所示。
您可能会问,为什么 Python 会告诉您 choice()需要 2 个位置参数 而不是一个 (seq)?那是因为 choice() 隐含 takes a self parameter 因为它是一个实例方法。但是出于作为函数调用者的意图和目的,您应该只传递一个参数,即一个序列,例如列表或元组。
【讨论】:
当您只输入 2 时,错误提示给出了 3 个参数,这可能看起来很奇怪,但您可能不知道 random.choice() 方法实际上是 random.Random() 对象的绑定方法。
因此,当错误显示but 3 were given 时,它们包含了您未传入的self 参数。下面是更清晰的错误场景演示:
obj = random.Random()
rand_num = random.Random.choice(obj, 1, 101)
输出:
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
random.Random.choice(obj, 1, 101)
TypeError: choice() takes 2 positional arguments but 3 were given
修复它的方法很简单;将1 和101 传递给range() 方法以将两个数字转换为一个元素:
rand_num = random.choice(range(1,101))
但更实用的方法是使用random.randint() 方法:
rand_num = random.randint(1,100)
【讨论】:
【讨论】:
Choice 从给定的直接指令中随机选择,例如 [1,2,3,4,5....]
看看你需要什么:
如果您从列表中随机选择某项,则:rand_num = random.choice([1,2,3,...., 101])
如果你需要一个从 1 到 101 的随机数,例如 a randint:
rand_num = random.randint(1, 101) 或者你可以使用标准函数range(start, stop, step) rand_num = random.choice(range(1, 101, 1))
【讨论】: