Questão 17: Crie uma função soma_indices_pares (lista) que retorne a soma dos elementos que estão nos índices pares da lista (índice
).
Exemplo: soma_indices_pares([10, 5, 20, 3, 40]) deve retornar
.
Passo 1
O enunciado pede para eu criar uma função chamada .
Informações relevantes fornecidas:
soma_indices_pares(lista) que retorne a soma dos elementos de uma lista que estão em índices pares, ou seja, índices
Informações relevantes fornecidas:
- O nome da função deve ser
soma_indices_pares. - A função recebe um parâmetro chamado
lista. - Deve somar apenas os elementos cujos índices são pares (índice
, , , etc.). - Exemplo dado: para a entrada
o resultado esperado é .
Passo 2
Entendendo bem o que é “índice par” numa lista: em Python (e na maioria das linguagens), os índices começam em
. Então os índices pares são exatamente aqueles números inteiros não-negativos que são múltiplos de
:
. Isso significa que eu quero acessar
lista[0], lista[2], lista[4], … até o final da lista.Passo 3
Estratégia simples e segura para a prova: percorrer os índices pares da lista e acumular os valores em uma variável
total. Para percorrer índices pares eu posso usar range(start, stop, step) com step = 2. Em termos de parâmetros:start = 0(começar em índice), stop = len(lista)(parar quando alcançar o comprimento da lista),step = 2(pular de 2 em 2 índices, obtendo).
A ideia geral (em pseudocódigo):
- iniciar
total = 0 - para cada
iemrange(0, len(lista), 2): fazertotal += lista[i] - retornar
total
Passo 4
Vamos explicar cada parte do código que implementa essa ideia, linha a linha, como se eu estivesse escrevendo na prova.
Linha 1: definir a função:
def soma_indices_pares(lista):
def soma_indices_pares(lista):
- Aqui eu declaro a função com o nome exigido e um parâmetro
listaque é a lista de entrada.
Linha 2: inicializar acumulador:
total = 0
total = 0
- Crio uma variável
totalque vai guardar a soma parcial. Inicializo comporque somar nada dá zero.
Linha 3–4: percorrer índices pares e somar:
for i in range(0, len(lista), 2):
total += lista[i]
for i in range(0, len(lista), 2):
total += lista[i]
range(0, len(lista), 2)gera a sequência de índicesaté o último índice menor que len(lista).- Em cada iteração,
ié um índice par elista[i]é o elemento nessa posição; somo esse elemento emtotalcomtotal += lista[i].
Linha 5: devolver o resultado:
return total
return total
- Retorno o valor final da soma.
Passo 5
Aplicando o código no exemplo para verificar passo a passo:
- Entrada:
lista = [10, 5, 20, 3, 40]. len(lista)é. range(0, 5, 2)gera os índices. - Iterações:
-
: total = 0 + lista[0] = 0 + 10 = 10 -
: total = 10 + lista[2] = 10 + 20 = 30 -
: total = 30 + lista[4] = 30 + 40 = 70
-
- Resultado:
70, que é exatamente.
Passo 6
Vou mostrar uma alternativa mais “pythônica” e curta que faz a mesma coisa usando slicing:
lista[::2]cria uma nova lista contendo somente os elementos de índices pares (start padrão0, step2).- Então
sum(lista[::2])soma esses elementos direto.
Essa alternativa é válida e muito usada em provas quando é permitido usar funções built-in.
Passo 7
Complexidade e casos especiais (o que anotar na prova):
- Complexidade de tempo: ambas as abordagens (loop com
rangeousum(lista[::2])) são, onde é len(lista), porque precisamos olhar todos os elementos com índices pares — algo na ordem de metade dos elementos, ainda. - Caso
listaesteja vazia (len(lista)=0), o loop não roda e a função retorna— comportamento desejável. - Pressuposição: os elementos de
listasão números (inteiros ou reais). Se houver outros tipos, pode ocorrer erro ao somar; na prova costuma-se assumir que a lista contém números.
Passo 8
Código final (implementação clara e adequada para a prova). Essa versão é direta, fácil de escrever e de explicar rapidamente durante uma prova:
Resposta
def soma_indices_pares(lista):
total = 0
for i in range(0, len(lista), 2):
total += lista[i]
return total
total = 0
for i in range(0, len(lista), 2):
total += lista[i]
return total