2014-01-22 2 views
0

У меня есть небольшая проблема с моей бинарной функции поиска внутри определения класса:Двоичный поиск и ошибка «возвращение» вне функции

def searchExactIndex(self, key): 


bottom = 0 
top = self.keyc 
found = False 

    while bottom <= top and not found: 
     middle = (bottom+top)/2 

     if self.keys[middle] == key: 
      found = True 
     elif self.keys[middle] < key: 
      bottom = middle + 1 
     else: 
      top = middle-1 
return middle 

Все остальное здесь работает только при запуске программы я получаю сообщение об ошибке:

while bottom <= top and not found:

IndentationError: unexpected indent

Почему это?

+1

Вы используете python? добавление языкового тега к вопросу поможет ему быть замеченным. –

+0

. Вероятно, вы смешали пробелы с вкладками как отступы. Не делай этого. – freakish

+0

http://en.wikipedia.org/wiki/Python_syntax_and_semantics#Indentation –

ответ

0

Как вы вводите этот код в python?

В соответствии с вашим кодом, вы должны иметь thoses синтаксические ошибки:

Если ввести в файле:

File "test.py", line 4 
    bottom = 0 
     ^
IndentationError: expected an indented block 

Если ввести в интерактивном питона:

>>> def searchExactIndex(self, key): 
... 
    File "<stdin>", line 2 

    ^
IndentationError: expected an indented block 

Решение заключается в идентификатор все содержание функции:

def searchExactIndex(self, key): 

    bottom = 0 
    top = self.keyc 
    found = False 

    while bottom <= top and not found: 
     middle = (bottom+top)/2 

     if self.keys[middle] == key: 
      found = True 
     elif self.keys[middle] < key: 
      bottom = middle + 1 
     else: 
      top = middle-1 
    return middle 

Кроме того, вы должны позаботиться о том, чтобы ключ отсутствовал. Пока вы всегда возвращаетесь на середину.

1

С ошибкой вы видите,

IndentationError: unexpected indent 

Python пытается сказать вам, что-то не так с тем, как вы отступом вашего кода, и действительно Eстью, вы должны смотреть на Отступе перед первые три строки в методе searchExactIndex.

Ваш код выглядит отлично, за исключением отступа, что значимо для Python. Функция должна выглядеть следующим образом:

def searchExactIndex(self, key): 
    bottom = 0 
    top = self.keyc 
    found = False 

    while bottom <= top and not found: 
     middle = (bottom+top)/2 

     if self.keys[middle] == key: 
      found = True 
     elif self.keys[middle] < key: 
      bottom = middle + 1 
     else: 
      top = middle-1 

    return middle 

Обратите внимание на линии, где bottom, top и found Создаются: они отступом быть внутри метода searchExactIndex. Убедитесь, что вы используете один тип отступов (т. Е. Только пробелы) и сохраняйте его согласованным.

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