Aprender como fazer uma calculadora em Python é uma ótima forma de praticar entrada de dados, operadores, funções, condicionais, laços e tratamento de erros. Neste guia, você começa com um código completo e funcional e, depois, entende cada parte para poder adaptar o projeto.
Como fazer uma calculadora em Python
Copie o código abaixo, salve-o em um arquivo chamado calculadora.py e execute com python calculadora.py.
def somar(a, b):
return a + b
def subtrair(a, b):
return a - b
def multiplicar(a, b):
return a * b
def dividir(a, b):
if b == 0:
raise ValueError("Não é possível dividir por zero.")
return a / b
operacoes = {
"1": ("Adição", somar),
"2": ("Subtração", subtrair),
"3": ("Multiplicação", multiplicar),
"4": ("Divisão", dividir),
}
while True:
print("\nCALCULADORA EM PYTHON")
for codigo, (nome, _) in operacoes.items():
print(f"{codigo} - {nome}")
print("0 - Sair")
escolha = input("Escolha uma opção: ").strip()
if escolha == "0":
print("Calculadora encerrada.")
break
if escolha not in operacoes:
print("Opção inválida.")
continue
try:
numero_1 = float(input("Digite o primeiro número: "))
numero_2 = float(input("Digite o segundo número: "))
nome, funcao = operacoes[escolha]
resultado = funcao(numero_1, numero_2)
print(f"{nome}: {resultado:g}")
except ValueError as erro:
print(f"Erro: {erro}")Esse programa oferece as quatro operações básicas, impede divisão por zero, rejeita opções inexistentes e continua funcionando até que o usuário escolha sair.
Como o código funciona
1. Funções para cada operação
As funções somar(), subtrair(), multiplicar() e dividir() recebem dois números e devolvem o resultado. Separar as operações em funções deixa o código mais fácil de testar, reutilizar e ampliar.
2. Dicionário de operações
O dicionário operacoes relaciona cada opção do menu a um nome e a uma função. Assim, não é necessário criar uma cadeia longa de if e elif.
3. Entrada e conversão de números
A função input() sempre retorna texto. Por isso, o programa converte a entrada para float, permitindo trabalhar tanto com inteiros quanto com números decimais.
4. Tratamento de erros
O bloco try/except evita que a calculadora seja encerrada quando o usuário digita texto no lugar de um número ou tenta dividir por zero. Em vez de quebrar, o programa mostra uma mensagem clara e volta ao menu.
Versão simples para iniciantes
Para estudar apenas entrada de dados e operadores, você pode começar com uma versão menor:
numero_1 = float(input("Primeiro número: "))
numero_2 = float(input("Segundo número: "))
operacao = input("Operação (+, -, * ou /): ").strip()
if operacao == "+":
resultado = numero_1 + numero_2
elif operacao == "-":
resultado = numero_1 - numero_2
elif operacao == "*":
resultado = numero_1 * numero_2
elif operacao == "/":
if numero_2 == 0:
resultado = "não é possível dividir por zero"
else:
resultado = numero_1 / numero_2
else:
resultado = "operação inválida"
print(f"Resultado: {resultado}")Essa versão é curta e didática. Quando ela estiver clara, avance para a primeira implementação, que usa funções, repetição e tratamento de exceções.
Calculadora com interface gráfica usando Tkinter
Depois da versão no terminal, você pode criar uma janela com botões e campos de texto usando o Tkinter, biblioteca gráfica incluída na maioria das instalações do Python.
import tkinter as tk
from tkinter import messagebox
def calcular():
try:
a = float(entrada_1.get())
b = float(entrada_2.get())
operacao = operador.get()
if operacao == "+":
resultado = a + b
elif operacao == "-":
resultado = a - b
elif operacao == "*":
resultado = a * b
elif operacao == "/":
if b == 0:
raise ValueError("Não é possível dividir por zero.")
resultado = a / b
else:
raise ValueError("Escolha uma operação válida.")
texto_resultado.config(text=f"Resultado: {resultado:g}")
except ValueError as erro:
messagebox.showerror("Erro", str(erro))
janela = tk.Tk()
janela.title("Calculadora em Python")
janela.resizable(False, False)
entrada_1 = tk.Entry(janela)
entrada_1.grid(row=0, column=0, padx=8, pady=8)
operador = tk.StringVar(value="+")
tk.OptionMenu(janela, operador, "+", "-", "*", "/").grid(row=0, column=1)
entrada_2 = tk.Entry(janela)
entrada_2.grid(row=0, column=2, padx=8, pady=8)
tk.Button(janela, text="Calcular", command=calcular).grid(
row=1, column=0, columnspan=3, pady=8
)
texto_resultado = tk.Label(janela, text="Resultado: ")
texto_resultado.grid(row=2, column=0, columnspan=3, pady=8)
janela.mainloop()Veja o guia completo de Tkinter e interfaces gráficas em Python para entender janelas, widgets, eventos e organização do layout.
Erros comuns ao criar a calculadora
- Esquecer de converter o input: sem
int()oufloat(), o Python trata os valores como texto. - Não validar a divisão por zero: essa operação gera erro e deve ser verificada.
- Usar muitos blocos condicionais repetidos: funções e dicionários deixam o programa mais organizado.
- Não tratar entradas inválidas: um
try/exceptevita encerramentos inesperados. - Misturar interface e lógica: mantenha os cálculos em funções independentes sempre que possível.
Ideias para evoluir o projeto
- Adicionar potência, raiz quadrada, porcentagem e módulo.
- Guardar um histórico dos cálculos realizados.
- Criar testes automatizados para cada função.
- Separar o projeto em arquivos, como
operacoes.pyeapp.py. - Transformar a calculadora em uma aplicação gráfica mais completa.
Perguntas frequentes
Qual tipo numérico devo usar?
Use int quando aceitar somente números inteiros e float quando a calculadora precisar trabalhar com casas decimais.
Como impedir que o programa feche após um cálculo?
Coloque o menu dentro de um laço while e use break apenas quando o usuário selecionar a opção de sair.
Por que usar funções?
Funções reduzem repetição, facilitam testes e permitem incluir novas operações sem reescrever o programa inteiro.
É possível criar uma calculadora científica?
Sim. O módulo math oferece funções como raiz quadrada, seno, cosseno e logaritmo.
Conclusão
Uma calculadora em Python é um projeto pequeno, mas reúne conceitos fundamentais da linguagem. Comece pela versão simples, avance para funções e tratamento de erros e, por fim, experimente uma interface com Tkinter. Esse caminho transforma um exercício básico em um projeto bem estruturado para o seu portfólio.







