2016-03-31 21 views
2

再帰を使用して整数リストまたは浮動小数点数の合計を計算することを試みてみましょう。しかし、「範囲外のリストインデックス」エラーが発生しています。 これがばかげている場合は私を許してください。しかし、私はこれを非常に新しくしており、まだ遊んでいます。リストには、その中に要素がないときリストインデックスが範囲外です(Python 3)

def sum(listOfNumbers): 
    listOfNumbers == int or float 
    if len(listOfNumbers) == 1: 
     return listOfNumbers[0] 
    else: 
     return listOfNumbers[0] + sum(listOfNumbers[1:]) 


for (input, output) in [ ([1.0], 1), ([1,2], 3), ([1,2.0,3], 6) ]: 
    result = 'PASSED' if sum(input) == output else 'FAILED' 
    print('Test', input, result) 
    print(sum([])) 
+2

'print(sum([]) ')の出力はどうなると思いますか?あなたの関数の実行を視覚化して、実際に何が起こっているのかを見てみましょう。 – Kevin

+0

は、出力が[1.0]、[1,2]、[1,2.0,3]の合計であることを希望します。 – cedricroux

+0

これは既に 'sum'の名前を付けることをお勧めしません標準ライブラリ –

答えて

0

あなたsum機能が正しく動作しません。 len(listOfNumbers)はゼロに等しいので、else句が実行され、listOfNumbers[0]にアクセスしようとします。しかし、要素のないリストには0番目の要素がないため、listOfNumbers[0]は "リストのインデックスが範囲外です"というエラーでクラッシュします。

長さがゼロのリストを処理するように関数を変更します。この変更を実装するための最も簡単な方法は、次のようになります。

def sum(listOfNumbers): 
    if len(listOfNumbers) == 0: 
     return 0 
    if len(listOfNumbers) == 1: 
     return listOfNumbers[0] 
    else: 
     return listOfNumbers[0] + sum(listOfNumbers[1:]) 

...しかし、あなたが途中句削除することができますので、あなたは本当にのみ、1基本ケースが必要になります。

def sum(listOfNumbers): 
    if len(listOfNumbers) == 0: 
     return 0 
    else: 
     return listOfNumbers[0] + sum(listOfNumbers[1:]) 
+0

ありがとうございました!今私には意味をなさない print(sum([])はすべての要素の合計を取得しようとしています – cedricroux

1

をあなたは空のリストを渡していますあなたが作っているprint(sum())コールへのパラメータとして。あなたのsum()関数の結果を表示するには、おそらくinputを渡してみてください。

関連する問題