1
resposta

[Sugestão] Calculadora com tratamento de erros

O que mudariam para o código ser mais eficiente ?

main.py

from calculando import entrada_usuario
entrada_usuario()

calculando.py

def entrada_usuario():
    try:
        numerador = float(input('Digite o primeiro número: '))
        operacao = input('Digite a oeperação (+ -, *, /): ')
        denominador = float(input('Digite o segundo número: '))
        operacoes(numerador, operacao, denominador)
    except ValueError:
        print('Digite um valor valido')
        entrada_usuario()

def operacoes(numerador, operacao, denominador):
    simbolos = '+-*/'

    if operacao in list(simbolos):
       # if simbolo == operacao:
            if operacao == '+':
                resultado = numerador + denominador
            elif operacao == '-':
                resultado = numerador + denominador
            elif operacao == '*':
                resultado = numerador * denominador
            elif operacao == '/':
                try:
                    resultado = numerador / denominador
                except ZeroDivisionError:
                    print(f'Denominador invalido, {numerador} não pode ser dividido por 0.')
                    return entrada_usuario()             
    else:
        print('Opção invalida para a operação: ')
        return entrada_usuario()

    print(f'Resultado de: {numerador} {operacao} {denominador} = {resultado}')
        
1 resposta

Olá, William, como vai?

Obrigado por compartilhar sua solução. A estrutura geral está adequada ao que a atividade propõe: você modularizou em funções, tratou ValueError na entrada e utilizou try-except para ZeroDivisionError. A navegação do fluxo chamando novamente a função também mantém o programa utilizável após erros.

Há apenas um ponto de inconsistência no código. Na operação de subtração, o cálculo está utilizando soma em vez de subtrair, o que altera o resultado esperado quando o usuário escolhe -.

Se quiser evoluir a solução, uma melhoria opcional seria evitar a recursividade para repetir o fluxo e usar um laço while, o que previne empilhamento de chamadas em execuções muito longas. Mas, para o escopo do exercício, sua abordagem funciona corretamente.

Parabéns pela implementação e pelo cuidado em tratar exceções. Continue compartilhando suas soluções no fórum, ele segue à disposição.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!