У вашего кода есть две основные проблемы:
mid
используется для представления как индекса, так и значения. - Конец
binarySearch()
никогда не бывает достигнут.
Проблема № 1: mid
При создании newList
с использованием среза list
вы используете mid
в качестве индекса:
elif target > mid:
newList = numbers[mid:]
Однако mid
не является индексом. Это значение в середине list
:
mid = list[int(len(list)/2)]
Попробуйте использовать две переменные:
midIndex = int(len(list)/2)
midValue = list[midIndex]
Проблема № 2: binarySearch()
binarySearch()
никогда не достигает финала elif
, чтобы увидеть, что target
отсутствует в списке.
Финал elif
достигается только после проверки следующих условий:
if midValue == target:
...
elif target > midValue:
...
elif target < midValue:
...
Ясно , если midValue
и target
- два числа, одно из этих сравнений должно возвращать True
.
Из-за порядка выполненных проверок binarySearch()
никогда не заканчивается тем, что попадает в этот раздел:
elif len(list) == 1 and list[0] != target:
...
Чтобы решить эту проблему, попробуйте переставить операторы if
так, чтобы binarySearch()
достиг этой части кода.