Возвращает сумму элементов в массиве, игнорируя все элементы, которые l ie между элементами 6 и 9 (также включены) - PullRequest
0 голосов
/ 28 февраля 2020

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

Возвращает сумму чисел в массиве, за исключением игнорирования разделов чисел, начинающихся с 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

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

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Итерационное решение (мне это нравится):

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 до этого 9 не превращается в сумму).

0 голосов
/ 28 февраля 2020

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

    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):

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...