2016-03-31 14 views
2

Versuch, mit der Berechnung der Summe einer Liste von Ganzzahlen oder Gleitkommawerten unter Verwendung der Rekursion herumzuexperimentieren. Ich erhalte jedoch einen Fehler "Listenindex außerhalb des zulässigen Bereichs". Verzeihen Sie mir, wenn das albern ist, aber ich bin sehr neu und immer noch nur herumspielen.Listenindex außerhalb des Bereichs (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

Was erwarten Sie von der Ausgabe von 'print (sum ([]))'? Versuchen Sie, die Ausführung Ihrer Funktion zu visualisieren, um zu sehen, was in diesem Fall wirklich passiert. – Kevin

+0

möchte die Ausgabe die Summe von [1.0], [1,2] und [1,2.0,3] sein – cedricroux

+0

Als eine Randnotiz ist es keine gute Idee, Ihre Funktion 'sum' zu nennen, als das bereits ein Teil von ist die Standardbibliothek. –

Antwort

0

Ihre sum Funktion richtig funktioniert nicht, wenn die Liste keine Elemente in sich hat. len(listOfNumbers) wäre gleich Null, also wird die else-Klausel ausgeführt und versucht, auf listOfNumbers[0] zuzugreifen. Aber eine Liste ohne Elemente hat kein nulltes Element, daher stürzt listOfNumbers[0] mit einem Fehler "Listenindex außerhalb des Bereichs" ab.

Ändern Sie Ihre Funktion so, dass sie Listen der Länge Null verarbeitet. Der einfachste Weg, um diese Änderung zu implementieren wäre:

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

... Aber Sie wirklich brauchen nur einen Basisfall, so dass Sie die mittlere Klausel entfernen:

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

Danke, das macht jetzt Sinn für mich wie für den Ausdruck (Summe ([])) Ich versuche, die Summe aller Elemente zu erhalten – cedricroux

1

Sie passieren eine leere Liste als Parameter für die print(sum()) Anruf Sie machen. Vielleicht versuchen, input zu übergeben, um das Ergebnis Ihrer sum() Funktion gedruckt zu sehen.

Verwandte Themen