2017-01-17 4 views
-4

아래에서 볼 수있는 것처럼 병합 정렬 함수를 작성하려고했습니다. 하지만 테스트를 시도 할 때 오류가 발생합니다.Python의 병합 정렬 함수에서 오류가 반환되었습니다.

the name mergesort is not defined 

누구든지이 오류의 원인을 지적 할 수 있습니까?

def merge(self,a,b): 

    sorted_list=[] 

    while len(a)!=0 and len(b)!=0: 

     if a[0].get_type()<b[0].get_type(): 
      sorted_list.append(a[0]) 
      a.remove(a[0]) 
     else: 
      sorted_list.append(b[0]) 
      b.remove(b[0]) 
    if len(a)==0: 
     sorted_list+=b 
    else: 
     sorted_list+=a 

    return sorted_list 

def mergesort(self,lis): 

    if len(lis) == 0 or len(lis) == 1: 
     return lis 
    else: 
     middle = len(lis)// 2 
     a = mergesort(lis[middle:]) #in pycharm the next 3 lines are with red underlined 
     b = mergesort(lis[middle:]) 
     return merge(a,b) 
+2

들여 쓰기를 수정하십시오. – Tagc

+1

당신은 이상한'self' 주장을 가지고 있습니다. 이것들은 수업의 방법이라고 생각합니까? – user2357112

+0

예, 그들은 클래스의 메소드입니다 – Mary

답변

0

self 이러한 방법의 매개 변수 중 하나라는 사실은 클래스 (당신이 당신의 게시물에서 생략 한 것)의 가능성이 가장 높은 부분임을 의미한다.

맞으면 self.mergesort(l)을 사용하여 호출해야합니다. 여기서 l은 목록입니다.

비슷한 오류로 인해 다음에 발생하는 오류에 대한 선제 조치로 return merge(a, b)return self.merge(a, b)으로 바꿔야합니다.

마지막으로, 나는 에게의 모든 기능을 클래스의 메소드로 정의해야하는 이유를 묻습니다. 그들은 어떤 공유 데이터에 의존하는 것 같지 않습니다. 모듈 범위에서 더 적절하게 선언되지 않는다고 확신합니까?