2013-11-14 3 views
1
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 " 

недавно опубликовал этот вопрос, но мой код все еще не работает?Объект 'builtin_function_or_method' не подлежит подписке

+0

Вы не можете написать 'len [li]', когда 'len()' является встроенной функцией для вычисления длины объекта. –

ответ

4

вы используете неправильные скобки len(li) не len[li]

Помните, когда вы пытаетесь получить доступ к функции необходимо использовать function(args), если вы используете [] вы на самом деле доступ к последовательности, как список. your_list[index]. len - встроенная функция, так что вам нужно ()

+0

исправил его, спасибо! – user2928929

2

Python использует (...) для вызова функции и [...] для индексирования коллекции. Кроме того, то, что вы пытаетесь сделать сейчас, это индекс встроенной функции len.

Чтобы устранить эту проблему, используйте круглые скобки вместо квадратных скобок:

low, high = 0, len(li) 
+0

он по-прежнему не работает по какой-то причине .. он больше не дает мне ошибку, но он просто ничего не выводит – user2928929

+0

@ user2928929 - Как вы называете 'binary_search'? Используете ли вы 'print', как и в' print binary_search (li, targetValue) '? – iCodez

+0

yup, даже если я скажу print binary_search (li, targetValue), если targetValue находится в списке, он возвращает «мы его нашли», но если он не возвращает ничего. – user2928929

4

len является встроенной функцией, но вы пытаетесь использовать его в качестве последовательности:

len[li] 

Позвоните по телефону:

len(li) 

Обратите внимание на изменение формы там, индексирование выполняется с квадратными скобками, вызов осуществляется круглыми скобками.

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

Как вы можете видеть соединение является метод и должен быть вызван с(), который отсутствует, и причиной проблемы. Надеюсь, что это поможет всем найти метод и добавить().

Смежные вопросы