我被指示运行当前代码并理解错误消息并仅更改函数的一行 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'
答案 0 :(得分:1)
修改
只需为参数指定默认值:(感谢 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)
...