2017-12-22 15 views
0

以下は、指定された配列がソートされているかどうかを確認するためのコードです。行ごとにコードを理解するために、さまざまな段階で印刷コマンドを入れようとしましたが、無駄になりました。配列並べ替え順序の再突き出し

def sort(a): 

    if len(a) == 1: 
     return True 
    return a[0] <= a[1] and isSorted(a[1:]) 

a =[127,220,246,277,321,454,534,565,933] 

print(sort(a)) 

まず
これは

NameError: name 'isSorted' is not defined.

セカンド
エラーがスローされ、全体のコードは、速記のように思えます。 elseの後にelseがないのは、なぜisSortedがインデックス位置1だけを見ているのかです。これは再帰関数になっていると考えられ、1つも見えません。

+2

さて、あなたの関数名が ''ですisSorted' – sheldonzy

+1

あなたのコードはインデントに関する特別編集必要がないsort' –

答えて

1

あなたはこれを試すことができます。

def is_sorted(array): 
    if not array[1:]: 
     return True 
    if array[0] <= array[1]: 
     return is_sorted(array[1:]) 
    return False 

print(is_sorted([56, 100, 234, 250, 300])) 
print(is_sorted([506, 100, 24, 250, 300])) 

出力:

True 
False 
1

関数名がisSortedではなく、print(sort(a))と書くと、配列が返されず、この配列が既にソートされているかどうかを確認しています。

あなたが行う必要があります。

def sort(a): 
    if len(a) == 1: 
     return True 
    return a[0] <= a[1] and sort(a[1:]) 

a =[127,220,246,277,321,454,534,565,933] 
print(sort(a)) 

と出力:

True 

Second - the whole code seems like a shorthand. There is no else after if, why is the isSorted only looking from index position 1. This is supposed to a recursive function, can't see one.

をelse文は必要ありません。 そして、ifは、配列がインデックス0でソートされているかどうかをチェックし、配列でインデックス1を再帰的にチェックするため、インデックス位置1から開始します。 コードは、長さが1になるまで最後のインデックスに行き、再帰的に戻り、a[0] <= a[1]をチェックします。あなたは再帰についてもっと練習するべきです。

関連する問題