2017-01-17 4 views
-4

Я попытался написать функцию сортировки слияния, как вы можете видеть ниже. Но когда я пытаюсь проверить это, я получаю сообщение об ошибке:Ошибка, возвращаемая функцией сортировки Merge в 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).

Наконец, я должен задать , почему вы определяете все эти функции как методы класса. Они, похоже, не полагаются на какие-либо общие данные. Вы уверены, что они не будут более адекватно объявлены в области модулей?

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