1
resposta

[Projeto] 12 Calculadora com tratamento de erros

import os


def texto_estilizado(texto):
    os.system('clear')
    print(f'{"*" * (len(texto) + 10)}')
    print(f'*{texto.center(8 + len(texto))}*')
    print(f'{"*" * (len(texto) + 10)}')


def pausa():
    input('\nPressione Enter para continuar...')


def menu():
    texto_estilizado('Calculadora de Operações Simples')
    print('\n1. Soma')
    print('2. Subtração')
    print('3. Multiplicação')
    print('4. Divisão')
    print('5. Sair')


def escolha_menu():
    while True:
        os.system('clear')
        menu()
        try:
            escolha = int(input('\nEscolha uma opção: '))
            if escolha == 1:
                soma()
                pausa()
            elif escolha == 2:
                subtracao()
                pausa()
            elif escolha == 3:
                multiplicacao()
                pausa()
            elif escolha == 4:
                divisao()
                pausa()
            elif escolha == 5:
                fechar_programa()
                break
            else:
                print('Escolha Inválida! Números de 1 a 5')
                menu()

        except ValueError:
            print('Escolha Inválida! Digite sómente numeros.')


def soma():
    texto_estilizado('Soma')
    try:
        num1 = float(input('\nDigite o primeiro número: '))
        num2 = float(input('Digite o segundo número: '))
        resultado = num1 + num2
        print(f'\n{num1} + {num2} = {resultado}')

    except ValueError:
        print('\nErro: Entrada inválida. Digite apenas números.')


def subtracao():
    texto_estilizado('Subtração')
    try:
        num1 = float(input('\nDigite o primeiro número: '))
        num2 = float(input('Digite o segundo número: '))
        resultado = num1 - num2
        print(f'\n{num1} - {num2} = {resultado}')
    except ValueError:
        print('Escolha Inválida')


def multiplicacao():
    texto_estilizado('Multiplicação')
    try:
        num1 = float(input('\nDigite o primeiro número: '))
        num2 = float(input('Digite o segundo número:'))
        resultado = num1 * num2
        print(f'\n{num1} * {num2} = {resultado}')

    except ValueError:
        print('Escolha Inválida')


def divisao():
    texto_estilizado('Divisão')
    try:
        num1 = float(input('\nDigite o primeiro número: '))
        num2 = float(input('Digite o segundo número:'))
        resultado = num1 / num2
        print(f'\n{num1} / {num2} = {resultado}')

    except ValueError:
        print('Erro: Entrada inválida. Digite apenas números.')
    except ZeroDivisionError:
        print('Não é possível dividir por zero')


def fechar_programa():
    os.system('clear')
    texto_estilizado('Saindo da Calculadora...')
    exit()


def main():
    os.system('clear')
    escolha_menu()


if __name__ == '__main__':
    main()
1 resposta

Olá, Daniel, como vai?

O seu código demonstra uma excelente compreensão sobre a modularização em funções e a aplicação de blocos de controle de exceções em Python. A implementação do tratamento para ValueError e ZeroDivisionError foi feita de forma precisa e o uso da biblioteca os para limpar o terminal e estilizar a interface adiciona um capricho extra ao projeto. A lógica estruturada com um ponto de entrada principal e a separação das responsabilidades por funções tornam o script organizado e fácil de ler.

Como uma pequena sugestão para evoluir o projeto, você pode considerar a criação de uma função genérica para a entrada de dados numéricos que já contenha o try-except internamente. Isso evitaria a repetição do bloco de tratamento em todas as operações matemáticas e deixaria o código ainda mais enxuto. Por exemplo, uma função ler_numero() poderia retornar o valor convertido para float ou solicitar a entrada novamente até que um valor válido fosse digitado.

Parabéns pelo excelente exercício e por compartilhar sua solução. Continue praticando e postando seus avanços por aqui. O fórum está à disposição para qualquer dúvida ou novas interações.

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