2016-11-03 3 views
0

클래스의 바이너리 검색을 만들고 있습니다.바이너리 검색 작은 오류 파이썬 3.5

값이 목록에 있는지 여부에 따라 True 또는 False이 표시되어야합니다.

나는 오류없이 마지막 요소를 얻을 어차피, 내 코드 지금까지 :

def binarySearch(alist, value): 
    first = 0        
    last = len(alist)-1             
    found = False       

    while first <= last and not found:      
     midpoint = (first + last)//2   
     print(midpoint)      
     if value == midpoint: 
      found = True 
     else: 
      if value < alist[midpoint]: 
       last = midpoint-1 
      else: 
       first = midpoint+1 

    return found 


print(binarySearch([1,2,3,4,5],5)) 

라인 : last = len(alist)-1가리스트 내에서 마지막 요소를 인식하지 못하는 이유는 무엇입니까? 그것은 마지막에 하나 앞으로 간다. 그래서 위 코드를 실행했다면, True을 돌려 줄 때 False을 반환 할 것이다.

나는 내가 오히려 False를 표시하는 것보다 IndexError가 발생 5보다 높은 번호를 검색하려고하는 경우에는 나에게 마지막 요소를 제공하는 last = len(alist)을 시도했다.

아이디어가 있으십니까?

+0

'렌 (alist) 목록의'반환 길이. 리스트의 마지막 요소를 원하면 'alist [len (alist) -1]'을 사용해야합니다. –

+0

참고 : last len ​​(alist) % 10은 매번 마지막 요소에 적용됩니다. –

+0

또한 while 루프 조건을 '' '' '대신'first <= last '가 아니라'

답변

2

배열의 값이 아닌 인덱스 midpoint에 대해 값을 확인하고 있습니다.

if value == midpoint: 

대신해야합니다

if value == alist[midpoint]: