2016-03-31 19 views
2

Yineleme kullanılarak tamsayılar veya kayan noktaların toplamının hesaplanmasıyla ilgili denemeye çalışın. Ancak, 'aralık dışı bir liste dizini' hatası alıyorum. Bu aptalca beni affet ama ben bunun için çok yeni ve hala sadece etrafında oynuyorum. Liste içinde herhangi bir öğe olduğundaliste endeksi aralık dışı (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

Baskı (sum ([])) 'nin çıktısını ne bekliyorsunuz? Bu durumda ne olduğunu görmek için işlevinizin yürütülmesini görselleştirmeyi deneyin. – Kevin

+0

, çıktının [1.0], [1,2] ve [1,2.0,3] – cedricroux

+0

toplamı olmasını ister. Bir yan not olarak, fonksiyonun toplamı olarak adlandırmak zaten iyi bir fikir değildir. standart kütüphane. –

cevap

0

Sizin sum işlevi düzgün çalışmaz. len(listOfNumbers) sıfıra eşit olur, bu nedenle else tümceyi yürütür ve listOfNumbers[0]'a erişmeye çalışır. Ancak eleman içermeyen bir listenin sıfırıncı bir unsuru yoktur, bu nedenle listOfNumbers[0] "aralık dışı liste endeksi" hatasıyla kilitlenir.

İşlevinizi değiştirin, böylece sıfır uzunluk listelerini işler.

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

... Ama orta maddesini kaldırmak böylece gerçekten sadece bir taban kutusu gerekecek: Bu değişikliği uygulamak için en basit yol olacaktır

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

teşekkürler! Baskıya gelince (toplam ([])) Tüm elemanların toplamını almaya çalışıyorum – cedricroux

1

Boş liste geçiyoruz yaptığınız print(sum()) numaralı çağrıya bir parametre olarak. Yazdırdığınız sum() işlevinizin sonucunu görmek için input'u geçmeyi deneyin.

İlgili konular