Это весь вопрос:

Возвратите сумму чисел в массиве, за исключением игнорирования разделов чисел, начинающихся с 6 и продолжающихся до следующих 9 (за каждым 6 будет следовать по крайней мере один 9). Вернуть 0 без чисел.

Примеры того, как должен выглядеть вывод:

summer_69([1, 3, 5]) --> 9
summer_69([4, 5, 6, 7, 8, 9]) --> 9
summer_69([2, 1, 6, 9, 11]) --> 14

Я пытался использовать свой собственный метод, хотя есть и другие доступные решения, но я хотел знать, почему мое решение выдало ошибку. Я попытался инициализировать отдельный список с именем arr1 , и я намерен выполнять итерацию по указанному массиву до тех пор, пока он не достигнет первых 6. Затем я хочу продолжать добавлять элементы после 6 в новый массив arr1 , пока итератор не достигнет 9. И что касается остальных чисел, я суммирую их в блоке else кода.

Вот мое решение:

def summer_69(arr):
    sum = 0
    arr1 =[]
    for x,i in enumerate(arr):
        if i == 6:
            while arr[x]!=9:
                arr1 = i
                x+=1
        else:
            sum += arr[i]
    return sum

Я получаю следующую ошибку:

IndexError: list index out of range

Кто-нибудь может указать, почему это дает мне эту ошибку?

0
versace crispies 28 Фев 2020 в 20:21

2 ответа

Лучший ответ

Решение итератора (я люблю это):

def summer_69(arr):
    it = iter(arr)
    return sum(x for x in it if x != 6 or 9 not in it)

Это в основном суммирует значения. И всякий раз, когда 6 встречается, 9 not in it потребляет все значения до следующего 9 (и это ложно, поэтому ни одно из значений от этого 6 до этого {{X4} } сделать это в сумму).

1
Heap Overflow 28 Фев 2020 в 18:20

Ваша ошибка в этой строке:

    sum += arr[i]

Вы передаете значение, которое должно быть индексом. Просто измените i на x

КОД:

def summer_69(arr):
    sum = 0
    arr1 =[]
    for x, i in enumerate(arr):
        if i == 6:
            while arr[x]!=9:
                arr1 = i
                x += 1
        else:
            sum += arr[x]
    return sum

*НОТА:

Вы должны лучше назвать свои переменные. Например, здесь, в вашем коде:

for x, i in enumerate(arr):

Должно быть:

for index, value in enumerate(arr):

Так что вы можете лучше читать или отлаживать ошибки.

0
Errol 28 Фев 2020 в 17:35