Programando uma calculadora em python
Para elevar o nível da sua calculadora, vamos sair do básico e estruturá-la de forma modular. Adicionar a hipotenusa é um ótimo exercício, pois introduz o uso de bibliotecas externas, como a math.
Para calcular a hipotenusa ($c$) de um triângulo retângulo com catetos $a$ e $b$, usamos o Teorema de Pitágoras:
Aqui está uma versão completa e organizada:
O Código da Calculadora Pro
import math
def soma(a, b): return a + b
def subtrai(a, b): return a - b
def divide(a, b):
return a / b if b != 0 else "Erro: Divisão por zero"
def hipotenusa(a, b):
return math.hypot(a, b) # Função nativa que faz o cálculo de Pitágoras
def menu():
print("\n--- CALCULADORA PYTHON ---")
print("1. Soma (+)")
print("2. Subtração (-)")
print("3. Divisão (/)")
print("4. Hipotenusa (Teorema de Pitágoras)")
print("0. Sair")
while True:
menu()
opcao = input("\nEscolha uma opção: ")
if opcao == '0':
print("Saindo...")
break
if opcao in ['1', '2', '3', '4']:
try:
n1 = float(input("Digite o primeiro valor (ou cateto 1): "))
n2 = float(input("Digite o segundo valor (ou cateto 2): "))
if opcao == '1':
print(f"Resultado: {soma(n1, n2)}")
elif opcao == '2':
print(f"Resultado: {subtrai(n1, n2)}")
elif opcao == '3':
print(f"Resultado: {divide(n1, n2)}")
elif opcao == '4':
print(f"A hipotenusa é: {hipotenusa(n1, n2):.2f}")
except ValueError:
print("Erro: Digite apenas números válidos.")
else:
print("Opção inválida!")
Por que usar math.hypot?
Embora você pudesse escrever (a**2 + b**2)**0.5, o Python oferece o math.hypot(a, b) por dois motivos:
Precisão: Ele é numericamente mais estável para números muito grandes ou muito pequenos.
Legibilidade: Quem lê seu código entende imediatamente que você está lidando com geometria.
Próximos Passos
Agora que sua calculadora já resolve problemas de geometria, que tal torná-la ainda mais "completa"?
Histórico: Podemos criar uma lista para salvar os últimos resultados e mostrá-los ao usuário.
Interface Gráfica: Podemos usar a biblioteca
Tkinterpara criar janelas e botões reais.
A seguir um exemplo:
Excelente! Vamos transformar esse código em um aplicativo de verdade com janelas e botões.
Para isso, usaremos o Tkinter, que já vem instalado com o Python. Ele permite criar interfaces gráficas (GUI) de forma simples.
Calculadora Visual com Tkinter
Este código cria uma interface onde você digita os números e clica no botão da operação desejada.
import tkinter as tk
from tkinter import messagebox
import math
# Funções de Cálculo
def calcular(operacao):
try:
n1 = float(entry_n1.get())
n2 = float(entry_n2.get())
if operacao == "soma":
res = n1 + n2
elif operacao == "sub":
res = n1 - n2
elif operacao == "div":
res = n1 / n2 if n2 != 0 else "Erro (Div/0)"
elif operacao == "hipo":
res = math.hypot(n1, n2)
label_resultado.config(text=f"Resultado: {res:.2f}" if isinstance(res, float) else res)
except ValueError:
messagebox.showerror("Erro", "Por favor, insira números válidos.")
# Configuração da Janela Principal
janela = tk.Tk()
janela.title("Calculadora Pro")
janela.geometry("300x350")
# Entradas de Texto
tk.Label(janela, text="Número 1 / Cateto A:").pack(pady=5)
entry_n1 = tk.Entry(janela)
entry_n1.pack()
tk.Label(janela, text="Número 2 / Cateto B:").pack(pady=5)
entry_n2 = tk.Entry(janela)
entry_n2.pack()
# Botões de Operação
tk.Button(janela, text="Somar (+)", width=20, command=lambda: calcular("soma")).pack(pady=5)
tk.Button(janela, text="Subtrair (-)", width=20, command=lambda: calcular("sub")).pack(pady=5)
tk.Button(janela, text="Dividir (/)", width=20, command=lambda: calcular("div")).pack(pady=5)
tk.Button(janela, text="Hipotenusa (📐)", width=20, bg="lightblue", command=lambda: calcular("hipo")).pack(pady=5)
# Resultado
label_resultado = tk.Label(janela, text="Resultado: ", font=("Arial", 12, "bold"))
label_resultado.pack(pady=20)
janela.mainloop()
O que mudou aqui?
tk.Entry: São as caixas de texto onde o usuário digita.lambda: Usamoscommand=lambda: ...nos botões para que a função só execute quando o botão for clicado, passando o nome da operação como argumento.messagebox: Se o usuário digitar uma letra em vez de número, aparece uma janelinha de erro profissional.mainloop(): É o que mantém a janela aberta e "escutando" os cliques.

