Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Calculadora com tratamento de erros

import os

somar = lambda numero1, numero2 : numero1 + numero2
subtrair = lambda numero1, numero2: numero1 - numero2
multiplicar = lambda numero1, numero2: numero1 * numero2
dividir = lambda numero1, numero2: numero1/numero2 if numero2 != 0 else tratar_erro("Erro: Divisão por zero não é permitida.")

def calcular_operacao(numero1, numero2, operacao):
    match operacao:
        case "+":
            return somar(numero1, numero2)
        case "-":
            return subtrair(numero1, numero2)
        case "*":
            return multiplicar(numero1, numero2)
        case "/":
            return  dividir(numero1, numero2)
        case _:
            tratar_erro("Opção Inválida.")

def tratar_erro(mensagem):
    input(f"{mensagem} Aperte qualquer tecla para tentar novamente. ")
    main()

def main():
    os.system("cls")
    try:
        numero1 = float(input("Digite o primeiro número: "))
        operacao = input("Digite a operação (+, -, *, /): ")
        numero2 = float(input("Digite o segundo número: "))
    except:
        tratar_erro("Erro: Entrada inválida. Digite apenas números.")
    else:
        resultado = calcular_operacao(numero1, numero2, operacao)
        if resultado != None:
            print(f"Resultado: {resultado}")


if __name__ == "__main__":
    main()
2 respostas
solução!

Olá, Christian! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de funções lambda para simplificar operações matemáticas, utilizou muito bem o match case para organizar a lógica de escolha da operação e ainda compreendeu a importância do tratamento de erros para garantir a robustez do programa.

Uma dica interessante para o futuro é separar a lógica de cálculo da interação com o usuário. Assim:

def executar_calculo():
    try:
        numero1 = float(input("Digite o primeiro número: "))
        operacao = input("Digite a operação (+, -, *, /): ")
        numero2 = float(input("Digite o segundo número: "))
        return calcular_operacao(numero1, numero2, operacao)
    except ValueError:
        tratar_erro("Erro: Entrada inválida. Digite apenas números.")

Isso facilita a manutenção e deixa o código ainda mais modular.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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

somar = lambda numero1, numero2 : numero1 + numero2
subtrair = lambda numero1, numero2: numero1 - numero2
multiplicar = lambda numero1, numero2: numero1 * numero2
dividir = lambda numero1, numero2: numero1/numero2 if numero2 != 0 else tratar_erro("Erro: Divisão por zero não é permitida.")

def calcular_operacao(numero1, numero2, operacao):
    match operacao:
        case "+":
            return somar(numero1, numero2)
        case "-":
            return subtrair(numero1, numero2)
        case "*":
            return multiplicar(numero1, numero2)
        case "/":
            return  dividir(numero1, numero2)
        case _:
            tratar_erro("Opção Inválida.")

def tratar_erro(mensagem):
    input(f"{mensagem} Aperte qualquer tecla para tentar novamente. ")
    main()

def executar_calculo():
    try:
        numero1 = float(input("Digite o primeiro número: "))
        operacao = input("Digite a operação (+, -, *, /): ")
        numero2 = float(input("Digite o segundo número: "))
        return calcular_operacao(numero1, numero2, operacao)
    except:
        tratar_erro("Erro: Entrada inválida. Digite apenas números.")

def mostrar_resultado():
    resultado = executar_calculo()
    if resultado != None:
        print(f"Resultado: {resultado}")

def main():
    os.system("cls")
    mostrar_resultado()

if __name__ == "__main__":
    main()