1
resposta

Calculadora

def somar(n1,n2):
    return n1+n2

def subtrair(n1,n2):
    return n1-n2

def multiplicar(n1,n2):
    return n1*n2

def dividir(n1,n2):
    if n2 ==0:
        raise ZeroDivisionError ('Divisão por zero não é permitida!')
    return n1/n2

def calculadora():
    try:

        n1 = float (input ('Digite o primeiro número: '))
        operacao = input ('Operações:\n'
                      'Digite + para adição\n'
                      'Digite - para subtração\n'
                      'Digite * para multiplicação\n'
                      'Digite / para divisão.\n'
                      'Escolha: ')
        
        # valida a operação antes de pedir o segundo número
        if operacao not in ['+', '-', '*', '/']:
            print("Operação inválida!")
            return

        n2 = float (input ('Digite o segundo número: '))

        if operacao == '+':
            resultado = somar(n1,n2)
        elif operacao == '-':
            resultado = subtrair(n1,n2)
        elif operacao == '*':
            resultado = multiplicar(n1,n2)
        elif operacao == '/':
            resultado = dividir(n1,n2)
            return
        print (f'Resultado: {resultado:.2f}')

    except ValueError: # erro de valor, o usuário digitou uma letra, por exemplo
        print ('Erro: entrada inválida! Digite apenas números.')
    except ZeroDivisionError:
        print ('Erro: a divisão por zero não é permitida!')

calculadora()
1 resposta

Olá, Luciane, como vai?

O código está bem organizado, com as operações corretamente modularizadas em funções e uso adequado de try e except para tratar ValueError e ZeroDivisionError. A validação da operação antes de solicitar o segundo número também foi uma boa decisão e melhora a experiência de uso.

Há apenas um ponto de atenção na função calculadora. No bloco da divisão, após atribuir o resultado, existe um return logo em seguida. Esse retorno faz com que a função seja encerrada antes da linha que imprime o resultado, então o valor calculado não chega a ser exibido para o usuário. Removendo esse return, o comportamento fica consistente com as demais operações.

Obrigado por compartilhar sua solução e fique à vontade para continuar trazendo suas atividades e dúvidas no fórum, que está sempre à disposição.

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