'builtin_function_or_method'对象不可订阅

时间:2013-11-14 22:18:02

标签: python algorithm

def binary_search(li, targetValue):
    low, high = 0, len[li] #error on this line
    while low <= high:
        mid = (high - low)/2
        if li[mid] == targetValue:
             return "we found it!"
        elif li[mid] > targetValue:
             low = mid - 1;
        elif li[mid] < targetValue:
             high = mid + 1;
    print "search failure "

最近刚发布了这个问题,但我的代码仍然不起作用?

4 个答案:

答案 0 :(得分:8)

您使用的是错误的括号len(li)而不是len[li]

请记住,当您尝试访问某个功能时,如果使用function(args),则需要使用[],实际上您正在访问类似列表的序列。 your_list[index]。 len是内置函数,因此您需要()

答案 1 :(得分:4)

len是一个内置函数,但您尝试将其用作序列:

len[li]

改为调用函数:

len(li)

注意那里的形状变化,索引是用方括号完成的,调用是用圆括号完成的。

答案 2 :(得分:2)

Python使用(...)来调用函数,使用[...]来索引集合。此外,您现在要做的是索引内置函数len

要解决此问题,请使用括号代替方括号:

low, high = 0, len(li)

答案 3 :(得分:0)

我花了几分钟才弄明白这是什么错误。 有时候一个盲点阻止你看清楚。

不正确的

msg = "".join['Temperature out of range. Range is between', str(
            HeatedRefrigeratedShippingContainer.MIN_CELSIUS), " and ", str(
            RefrigeratorShippingContainer.MAX_CELSIUS)]

正确

msg = "".join(['Temperature out of range. Range is between', str(
        HeatedRefrigeratedShippingContainer.MIN_CELSIUS), " and ", str(
        RefrigeratorShippingContainer.MAX_CELSIUS)])

正如您所看到的,join是一种方法,必须使用()调用,该方法丢失并导致问题。希望它能帮助所有人查找方法并添加()。