Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
2
respostas

[Projeto] Calculando a soma de números

Essa eu tenho três soluções uma mais simples sem usar laços, mas como os exercícios são com laços proponho a solução 2 usando for e range com len e 3 varrendo a coleção de itens.

#solucao 1
valores = [10, 20, 30, 40, 50]

#A forma mais simples seria usando sum
total = sum(valores)
print(f"A soma total das receitas é: {total}")
#solução 2 mais complicada, mas usando for, range e len
valores = [10, 20, 30, 40, 50]
total = 0
for i in range(0,len(valores)):
  total += valores[i]

print(f"A soma total das receitas é: {total}")
#solucao 3
valores = [10, 20, 30, 40, 50]

total = 0
for valor in valores:
  total += valor
print(f"A soma total das receitas é: {total}") 
2 respostas
solução!

Olá, Marcelo. Como vai?

Que show de bola a sua entrega! É excelente ver você explorando múltiplas abordagens para resolver o mesmo problema. Esse exercício de olhar para um desafio e enxergar diferentes caminhos é o que diferencia um programador comum de um resolvedor de problemas de alto nível.

As suas três soluções estão perfeitamente corretas, e você fez uma análise de evolução de código fantástica. Vamos analisar a anatomia de cada uma delas sob a perspectiva das boas práticas de mercado no Python:

Solução 1: A Abordagem Prática (O Jeito Pythônico)

A sua primeira solução usando sum(valores) é, sem dúvidas, a melhor para o mundo real. O Python foi desenhado sob a filosofia de código limpo e legível. Se a linguagem já possui uma função nativa escrita em C por baixo dos panos (altamente otimizada para somar coleções), usá-la economiza linhas de código e entrega a melhor performance possível.

Solução 2: A Abordagem Tradicional (Estilo C/C++ ou Java)

A sua solução utilizando range(0, len(valores)) funciona perfeitamente e é muito comum para quem está migrando de linguagens mais antigas.

Contudo, na comunidade Python, usar o range(len()) apenas para ler os elementos de uma lista é considerado um pequeno "antipadrao" (code smell), a menos que você precise obrigatoriamente do número do índice para alguma outra operação (como modificar o valor daquela posição).

Solução 3: O Equilíbrio Perfeito com Laços

Já que o objetivo do capítulo era praticar laços, a sua Solução 3 é a mais elegante e correta para o contexto! O laço for valor in valores: faz o que chamamos de iteração direta. O Python cuida de extrair item por item da lista de forma totalmente limpa, sem que você precise gerenciar índices manuais (i).


Uma dica de ouro: E se você precisasse do índice E do valor?

Aproveitando o gancho da sua Solução 2 e 3, imagine um cenário real de negócios onde você precisa somar as receitas, mas também quer mostrar na tela o número de cada transação (ex: "Receita 1: 10", "Receita 2: 20").

Para não precisar usar o range(len()) da solução 2, o Python nos oferece uma função nativa fantástica chamada enumerate(). Ela nos entrega a posição e o valor ao mesmo tempo! Veja que evolução fantástica:

valores = [10, 20, 30, 40, 50]
total = 0

# O enumerate nos dá o índice (i) e o item (valor) a cada rodada
for i, valor in enumerate(valores, start=1):
    print(f"Transação {i}: R$ {valor}")
    total += valor

print(f"A soma total das receitas é: {total}")

Parabéns por trazer três visões tão ricas para o fórum do curso, Marcelo! Esse tipo de post ajuda muito os alunos que estão começando a entender que na programação raramente existe uma única resposta certa.

Espero que possa ter lhe ajudado!

este enumerate tem vantagem de performance sobre alguns dos outros?