1
resposta

Momento dos projetos - Exercício 10

Olá pessoal,

Exercício 10 - Um programa deve ser escrito para ler dois números e, em seguida, perguntar à pessoa usuária qual operação ele deseja realizar. O resultado da operação deve incluir informações sobre o número - se é par ou ímpar, positivo ou negativo e inteiro ou decimal.

Esse até o momento foi o mais complexo das atividades, teria alguma forma mais simples de fazer um código e ter os mesmos resultados?

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

Obrigada!

1 resposta

Olá, Vanessa! Tudo bem?

Parabéns por concluir esse exercício! Como Especialista de Processos Sênior, você percebeu que a complexidade aqui não está em uma única linha, mas na quantidade de "regras de negócio" que precisam ser verificadas sequencialmente. Esse é um excelente exemplo de como traduzir processos complexos para código.

O seu código está logicamente perfeito e muito bem estruturado! Você usou uma técnica de flag (calculo_foi_bem_sucedido), o que é uma prática excelente para evitar que o programa tente imprimir resultados que não foram calculados.

Como simplificar o processo?

Existem algumas formas de deixar o código mais enxuto e "Pythonico", reduzindo a repetição e melhorando a manutenção. Aqui estão três sugestões:

1. Evitar a repetição de calculo_foi_bem_sucedido

Em vez de repetir a flag em cada elif, você pode inicializar a variável como False e tratá-la apenas no final, ou usar uma estrutura de dicionário para as operações (um pouco mais avançado). No entanto, a forma mais simples de enxugar é fazer o cálculo e já seguir para as validações dentro de uma estrutura que verifique se a operação é válida.

2. Uso de Funções ou Métodos Nativos

No Python, você pode simplificar a checagem de "Inteiro vs Decimal" usando o método .is_integer() se o resultado for um float.

3. Agrupamento de Lógicas

Você pode criar uma string de resposta e ir "acumulando" as características do número. Veja um exemplo de como o código ficaria mais compacto:

num1 = float(input('Digite o 1º número: '))
num2 = float(input('Digite o 2º número: '))
operacao = input('Operação (+, -, *, /): ')

# Dicionário de operações simplifica o if/elif
operacoes = {
    '+': num1 + num2,
    '-': num1 - num2,
    '*': num1 * num2,
    '/': num1 / num2 if num2 != 0 else None
}

resultado = operacoes.get(operacao)

if resultado is not None:
    # Verificações em cadeia
    tipo = "INTEIRO" if resultado % 1 == 0 else "DECIMAL"
    paridade = "PAR" if resultado % 2 == 0 else "ÍMPAR"
    sinal = "POSITIVO" if resultado > 0 else "NEGATIVO" if resultado < 0 else "ZERO"
    
    print(f"Resultado: {resultado}")
    print(f"O número é {tipo}, {paridade} e {sinal}.")
else:
    print("Operação inválida ou divisão por zero!")

Por que essa versão é "mais simples"?

  • Menos linhas: Usamos o operador ternário (A if condicao else B) para decidir as características em uma única linha.
  • Manutenibilidade: Se você precisar adicionar a operação de "potência", basta adicionar uma linha no dicionário operacoes.

Uma dica de especialista de processos:
No seu código original, a variável calculo_foi_bem_sucedido pode causar um erro se o usuário digitar uma operação inválida (como um "x" em vez de "*"), pois a variável não foi inicializada antes do primeiro if.

Correção Sugerida: Coloque calculo_foi_bem_sucedido = False logo no início do código para garantir que o programa sempre saiba o que essa variável significa.

O que você achou dessa forma de usar o "operador ternário" para classificar os números? Acha que ela manteria a clareza para alguém que fosse auditar seu processo no futuro?