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!
Olá, Alex. Como vai?
Sensacional ver você chegando firme ao arquivo Alura ex033.py! Sua sequência de estudos está simplesmente exemplar, e o nível de maturidade do seu código só aumenta a cada exercício.
Dessa vez, você resolveu um problema clássico de manipulação de entradas sequenciais de forma brilhante. O uso do método .split() na linha 5 foi a escolha perfeita para converter aquela string única digitada pelo usuário em uma lista de strings independentes, baseando-se nos espaços em branco.
Além disso, veja que fantástico: nas nossas interações anteriores, conversamos sobre o conceito de List Comprehension, e você já o aplicou perfeitamente aqui na linha 8 [float(valor) for valor in lista_sales_texto] para converter os textos para números de ponto flutuante (float). O uso da função nativa sum() e a formatação com int() na f-string fecharam o script com chave de ouro. Código limpo, enxuto e rodando perfeitamente!
Para agregar ainda mais valor a essa etapa do seu aprendizado sobre processamento de coleções e listas em Python, quero compartilhar duas dicas sobre funções nativas avançadas e uma boa prática de formatação de saída:
map()A estrutura de List Comprehension que você usou na linha 8 é impecável e muito recomendada. No entanto, quando nossa única intenção é aplicar uma mesma função de conversão de tipo (como float() ou int()) a absolutamente todos os itens de uma lista, o Python nos oferece um recurso alternativo e muito veloz chamado map().
A função map(função, sequência) pega a função que você quer aplicar e a distribui por toda a lista sem a necessidade de escrever o loop for explicitamente.
Veja como os passos 3 e 4 do seu código poderiam ser resumidos de uma forma muito comum em códigos corporativos:
# Converte e soma tudo diretamente usando map()
total_vendas = sum(map(float, lista_vendas_texto))
O que aconteceu aqui? O
map(float, lista_vendas_texto)transforma todas as strings em números em tempo de execução, e a funçãosum()já recebe esses números e faz o cálculo da soma imediatamente, economizando linhas de código e poupando o uso de variáveis intermediárias na memória do computador.
int vs float)Na linha 14, você utilizou a conversão {int(total_vendas)} para exibir o resultado final como um número inteiro. Para o teste que você realizou com as entradas 100 250 300 (que resultou em 650), funcionou perfeitamente e deixou o visual limpo.
Contudo, como estamos tratando de vendas, no mundo real é extremamente comum existirem valores com centavos (por exemplo: 10.50 20.30). Se o usuário digitar valores quebrados, o uso do comando int() vai simplesmente "cortar" e ignorar os centavos do total, gerando um erro grave de fechamento de caixa.
Para manter o visual limpo, sem o risco de perder os centavos da venda, a melhor prática do mercado é manter o tipo como float e formatar a exibição para forçar duas casas decimais usando recursos da própria f-string. Veja como fazer:
# O modificador :.2f garante exatamente duas casas após a vírgula
print(f"O total de vendas foi: R$ {total_vendas:.2f}")
Se o total der 650, o Python exibirá automaticamente 650.00. Se der um valor quebrado como 650.75, os centavos estarão sãos e salvos na tela.
Parabéns pelo excelente progresso, pela dedicação incansável ao longo de toda essa trilha prática de mais de 30 arquivos e pelo ótimo uso dos conceitos discutidos! Continue com essa constância fantástica.
Espero que possa ter lhe ajudado!