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?