1
resposta

Calculadora com tratamento de erros

import msvcrt
import os

def limpar_tela():
    os.system("cls")

def pausa_limpa(texto):
    print(texto)
    print("Aperte uma tecla para continuar", end="", flush=True)
    msvcrt.getch()
    limpar_tela()

def pedir_numero(n):
        while True:
            try:
                numero = float(input(f"Digite o {n}° número: "))
            except ValueError:
                pausa_limpa("Erro de caractere")
                continue 
            return numero
        

def pedir_operacao():
        operacoes = ["+", "-", "*", "/"]
        while True:
            try: 
                op = input("Digite a operação (+, -, *, /): ")
                if op not in operacoes:
                    raise ValueError
            except:
                pausa_limpa("Erro. Não digitou as opções válidas")
                continue
            return op

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

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

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

def div(n1, n2):
    try:
        return (n1 / n2)
    except ZeroDivisionError:
        pausa_limpa("Erro: Divisão por 0")
        return None

def calculando(n1, n2, op):
    if op == "+":
        return soma(n1, n2)
    elif op == "-":
        return sub(n1, n2)
    elif op == "*":
        return mul(n1, n2)
    else:
        return div(n1, n2)

def calculadora_simples():
    n1 = pedir_numero(1)
    op = pedir_operacao()
    n2 = pedir_numero(2)
    resultado = calculando(n1, n2, op)

    print(f"O resultado é {resultado}")

def funcao_continuar():
    respostas_validas = ["s", "sim", "n", "nao"]
    while True:
            resp = input("Quer fazer outra operação (s/n): ").lower()
            if resp in ["s", "sim"]:
                return True
            elif resp in ["n", "nao"]:
                return False
            else:
                 pausa_limpa("Resposta inválida. Digite 's' ou 'n'")
                 

def main():
    while True:
        calculadora_simples()
        if funcao_continuar():
            limpar_tela()
        else:
            print("Encerrando programa.")
            break

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

Oi, Rafaela! Como vai?

Agradeço por compartilhar.

Gostei da sua organização ao separar bem as funções e tratar os erros com try/except, importante para deixar a calculadora mais confiável e o código mais legível.

Continue explorando esse tipo de projeto, pois ele ajuda muito a ganhar confiança com Python e tratamento de erros.

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