def series_sum(n):
    listSeries = [1, 1/4, 1/7, 1/10, 1/13, 1/16, 1/19, 1/22, 1/25]
    sum = 0.00
    for i in range(n):
        sum += listSeries[i]
    return str("{:.2f}".format(sum))

Hej, mój kod przechodzi wszystkie testy i działa z tym wyzwaniem, ale pojawia się jeden denerwujący błąd, którego nie wiem, jak go rozwiązać. Wynik operacji poza skalą. list[i-1] nie wyszło. Mam nadzieję, że nie ma potrzeby przepisywania całego kodu, aby to naprawić. codewars.com/kata/555eded1ad94b00403000071/train/python

Traceback (most recent call last):
  File "main.py", line 13, in <module>
    Test.assert_equals(series_sum(15), "1.94")
  File "/home/codewarrior/solution.py", line 5, in series_sum
    sum += listSeries[i]
IndexError: list index out of range

Dzięki.

2
Alcyl 2 kwiecień 2020, 17:07

4 odpowiedzi

Najlepsza odpowiedź

Przyjrzałem się linku, który wysłałeś, i sugeruję wygenerowanie lista zależy od wartości n, aby nie otrzymać IndexError:

def series_sum(n):
    fractions = []
    for n in range(1, 3*n - 1, 3):
        fractions.append(1/n)
    return "{:.2f}".format(sum(fractions))

Przetestowałem kod na stronie i zadziałał dla wszystkich rozwiązań.

3
harens 2 kwiecień 2020, 18:12

Co powiesz na:

def series_sum(n):
    return '{:.2f}'.format(sum(1/(1+i*3) for i in range(n)))

print(series_sum(15))

Wynik:

1.94
3
JvdV 2 kwiecień 2020, 15:00

Chodzi o to, że na liście nie ma żadnych elementów po elemencie o indeksie 8 (pozycja 9) Tak więc, gdy spróbujesz użyć for i in range(n) z wartością n=15 Daje ci błąd.

Jednym ze sposobów uniknięcia tego jest dodanie instrukcji if na początku kodu lubię to:

def series_sum(n):
    l1 = [1, 1/4, 1/7, 1/10, 1/13, 1/16, 1/19, 1/22, 1/25] #You cant use list as a variable name
    if len(l1) < n:
        n = len(l1) #Or do something else here that you wish to do
    #Note: doing n = l1 here will give you the sum of the entire list if n > length of list
    sum = 0.00
    for i in range(n):
        sum += l1[i]
    return str("{:.2f}".format(sum))
0
Akshath Mahajan 2 kwiecień 2020, 14:19

Chodzi tylko o wyjątki w twoim systemie. Musisz być pewien

  len(listSeries) > n
0
Burak Ekincioğlu 2 kwiecień 2020, 14:51