缺少参数和类型错误
问题描述:
我被指示运行当前代码并理解错误消息,并且仅更改函数bs的一行,并修复了错误,我可以理解错误消息的内容,但是我不知道如何 修复它或在实际问题中的函数BS缺少参数和类型错误
def bs(L, item, left, right):
if right is None:
right = len(L)
if right - left == 0:
return False
if right - left == 1:
return L[left] == item
median = (right + left)//2
if item < L[median]:
return bs(L, item, left, median)
else:
return bs(L, item, median, right)
L = [i for i in range(10)]
for i in range(20):
print(bs(L, i))
错误发生如下
print(bs(L, i))
TypeError: bs() missing 2 required positional arguments: 'left' and 'right'
答
编辑
简单,默认值分配给您的参数:(感谢trentcl)
def bs(L, item, left = 0, right = None):
...
之前编辑
如果你想调用函数一样bs(L, i)
,你需要在默认值你的功能。 left
必须为0,right
默认为len(L)
,但据我所知,在函数定义中不能这样做。改变这些行:
sentinel = object()
def bs(L, item, left = 0, right = sentinel):
if right is sentinel:
right = len(L)
...
Sentinel用作标记或伪数据如常。 Here就是一个例子。如果它混淆了你的心,你不想使用它,只需使用一个特殊的整数像-1
:
def bs(L, item, left = 0, right = -1):
if right is -1:
right = len(L)
...
错误是相当多的自我解释,正是你难道不明白吗? – alfasin
您需要为该函数提供两个以上的参数。该函数需要4个参数 –
我不明白我如何修改函数bs而不改变多行。我认为这个错误出现在打印声明中缺少左侧和右侧,print(bs(L,i)),但那不是它, –