2017-01-17 3 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は、これらのメソッドへのパラメータの一つであるという事実は、彼らは、クラス(あなたのポストから省略してきた1)の最も可能性の高い部分だということを意味します。

これが正しい場合、self.mergesort(l)を使用して呼び出す必要があります。lはリストです。

同様の理由から、次のエラーが発生した場合の先行対策として、return merge(a, b)return self.merge(a, b)に置き換える必要があります。

最後に、私はなぜあなたはクラスのメソッドとしてこれらのすべての機能を定義しているのかと尋ねなければなりません。彼らは、どの共有データにも依存していないようです。モジュールスコープで適切に宣言されないと確信していますか?

関連する問題