почему то посреди кода просто пропускается четный индекс, задание из checkio

Рейтинг: 1Ответов: 2Опубликовано: 20.07.2023

там где assert все норм, но в строчке, кт я перед example написал, ответ получается -1476, а не 1968. Пробовал с помощью отладки посмотреть, что не так, а там индекс именно числа "84"(т.е. 16) проверку на четность индекса не проходит и код его пропускает.

само задание:

"Дан массив целых чисел. Нужно найти сумму элементов с четными индексами (0-й, 2-й, 4-й итд), затем перемножить эту сумму и последний элемент исходного массива. Не забудьте, что первый элемент массива имеет индекс 0.

Для пустого массива результат всегда 0 (ноль)."

def checkio(array: list[int]) -> int:
    if not array:
        return 0
    a = []
    for i in array:
        if array.index(i) % 2 == 0:
            a.append(i)
    return sum(a)*array[-1]

print(checkio([-37, -36, -19, -99, 29, 20, 3, -7, -64, 84, 36, 62, 26, -76, 55, -24, 84, 49, -65, 41])) #должно в итоге получиться 1968
print("Example:")
print(checkio([0, 1, 2, 3, 4, 5]))

# These "asserts" are used for self-checking
assert checkio([0, 1, 2, 3, 4, 5]) == 30
assert checkio([1, 3, 5]) == 30
assert checkio([6]) == 36
assert checkio([]) == 0

print("The mission is done! Click 'Check Solution' to earn rewards!")

Ответы

▲ 2Принят

Потому что метод index возвращает позицию первого вхождения элемента. В списке [-37, -36, -19, -99, 29, 20, 3, -7, -64, 84, 36, 62, 26, -76, 55, -24, 84, 49, -65, 41] у вас дублируется элемент 84, поэтому сумма считается неправильно.

Поправьте функцию

def checkio(array: list[int]) -> int:
    if not array:
        return 0
    a = []
    for i in range(len(array)):
        if i % 2 == 0:
            a.append(array[i])
    return sum(a)*array[-1]

Результат:

1968
Example:
30
The mission is done! Click 'Check Solution' to earn rewards!
▲ 1

А вообще можно гораздо короче написать, в одну строку, используя тернарный оператор и срез с шагом 2:

def checkio(array: list[int]) -> int:
    return 0 if not array else sum(array[::2] * array[-1])