


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á, Wagner. Como vai?
Parabéns pelo excelente trabalho! Resolver uma lista de exercícios desse tamanho, cobrindo tantos cenários e lógicas diferentes de estruturas condicionais, exige muita dedicação e foco. Os seus scripts ficaram muito bem organizados, e o uso de saídas limpas no console demonstra uma ótima preocupação com a experiência do usuário.
Como você compartilhou a sua lista completa do "Hora da Prática", analisei os seus códigos detalhadamente e separei algumas validações, destaques e boas práticas que vão elevar ainda mais o nível técnico da sua programação em Python:
Gostaria de parabenizar a sua sacada genial ao utilizar as funções de tratamento de strings diretamente na captura dos dados:
.replace(",", ".")**: Isso resolve uma das maiores dores de cabeça do suporte de software no Brasil. Como culturalmente digitamos números decimais com vírgula (ex: 10,5), o Python dispararia um erro ao tentar converter essa string para float(). O seu .replace() limpou os dados perfeitamente de forma preventiva..lower() e .upper()**: Garantir a padronização das entradas nas questões do turno (Questão 7) e do tipo de combustível (Questão 12) evita que o programa quebre ou caia no bloco else caso o usuário digite letras maiúsculas por engano. Excelente!Na Questão 10 (o script da calculadora), notei um pequeno detalhe na verificação se o resultado é par ou ímpar:
if result % 2 == 0:
par = 'par'
else:
par = 'ímpar'
% 2 funciona perfeitamente para números inteiros (como você fez na Questão 8). Contudo, na Questão 10, as variáveis nume_1 e nume_2 foram convertidas para float. Se a pessoa usuária realizar uma divisão que resulte em um número decimal (por exemplo, $15 / 2 = 7.5$), a operação 7.5 % 2 resultará em 1.5, fazendo o programa classificar o número como ímpar. Dizer que um número decimal é "par ou ímpar" fere as regras da matemática elementar, pois essa classificação só pertence ao conjunto dos números inteiros.if dec == 'inteiro':
par = 'par' if result % 2 == 0 else 'ímpar'
else:
par = 'não aplicável (número decimal)'
Na Questão 6 (ordenar três números de forma decrescente), a sua estratégia matemática para encontrar o número do meio foi brilhante e muito criativa:
meio = (nu_1 + nu_2 + nu_3) - (maior + menor)
Essa lógica economiza uma árvore gigantesca de if/elif/else. Porém, notei que para descobrir quem era o maior e o menor, você escreveu blocos if isolados e sequenciais.
No Python, quando queremos apenas capturar o valor extremo de uma coleção, podemos substituir todas aquelas linhas de condicionais pelas funções nativas max() e min(), reduzindo drasticamente o tamanho do script e deixando-o imune a erros de indentação:
# Substitui os blocos de if do maior e menor por:
maior = max(nu_1, nu_2, nu_3)
menor = min(nu_1, nu_2, nu_3)
meio = (nu_1 + nu_2 + nu_3) - (maior + menor)
Na Questão 3, para validar se a letra digitada era uma vogal, você criou uma string vogais = 'aeiou' e utilizou o operador in. Ficou perfeito!
Podemos adotar essa mesma mentalidade de simplificação e agrupamento na Questão 11 (validação do triângulo Isósceles) para deixar a leitura do código mais natural. Veja como o seu elif longo pode ser reescrito de forma elegante:
# Código original:
# elif val_1 == val_2 or val_3 == val_2 or val_3 == val_1:
# Código Pythonico (se houver exatamente 2 lados iguais):
elif len({val_1, val_2, val_3}) == 2:
tipo = 'triângulo Isósceles'
(Nota técnica: O uso de chaves {} cria um set no Python, que descarta valores duplicados automaticamente. Se a lista de 3 lados vira um conjunto de tamanho 2, significa que obrigatoriamente dois lados são iguais e um é diferente!).
Parabéns pela excelente consistência em todos os prints de resultados e f-strings. Continue com esse ótimo nível de dedicação e capricho nos próximos módulos de lógica e estruturas de repetição!
Espero que possa ter lhe ajudado!