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!

1
resposta

Desafio: hora da pratica 3 - Estruturas condicionais - Wagner Feitosa

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

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:


1. Destaque de Boas Práticas: Tratamento do Input da Pessoa Usuária

Gostaria de parabenizar a sua sacada genial ao utilizar as funções de tratamento de strings diretamente na captura dos dados:

  • **Uso do .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.
  • **Uso do .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!

2. Ponto de Atenção: Lógica de Identificação de Números Pares (Questão 10)

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'
  • O Bug Oculto: O operador de resto % 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.
  • Como Corrigir: Uma boa prática de arquitetura de código é aninhar a validação ou apenas verificar se o número é par caso ele passe primeiro no teste de ser inteiro:
if dec == 'inteiro':
    par = 'par' if result % 2 == 0 else 'ímpar'
else:
    par = 'não aplicável (número decimal)'

3. Otimização de Código: Evitando Contas Redundantes (Questão 6)

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)

4. Refatoração Elegante: Simplificando com Operadores de Associação (Questão 3)

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!