Mundo em Python

Simulador de Certificado Energético

import tkinter as tk
from tkinter import ttk, messagebox def calcular_pontuacao(dados):
pontuacao = 100
ano = dados['ano_construcao']
area = dados['area_bruta'] if ano < 1980:
pontuacao -= 30
elif 1980 <= ano < 2000:
pontuacao -= 15
elif 2000 <= ano < 2006:
pontuacao -= 5
elif ano >= 2006:
pontuacao += 10

isolamento_paredes = dados['isolamento_paredes']
pontuacao += {"fraco": -25, "medio": -10, "bom": 5, "excelente": 15}[isolamento_paredes] tipo_vidro = dados['tipo_vidro']
pontuacao += {"simples": -20, "duplo": 10, "triplo": 20}[tipo_vidro] if dados['corte_termico'] == "nao":
pontuacao -= 10

isolamento_cobertura = dados['isolamento_cobertura']
pontuacao += {"inexistente": -20, "fraco": -10, "medio": 5, "bom": 10}[isolamento_cobertura] sistema_aquecimento = dados['sistema_aquecimento']
pontuacao += {
"radiador eletrico": -15, "nenhum": -15,
"caldeira": -5, "ar condicionado": 5, "bomba calor": 15
}[sistema_aquecimento] sistema_aqs = dados['sistema_aqs']
pontuacao += {"esquentador": -5, "termoacumulador": 0, "painel solar termico": 20}[sistema_aqs] if dados['energia_renovavel'] == "sim":
pontuacao += 25

if area > 200:
pontuacao += 5
elif area < 50:
pontuacao -= 5

return pontuacao def obter_classe(pontuacao):
if pontuacao >= 160:
return "A+"
elif pontuacao >= 140:
return "A"
elif pontuacao >= 120:
return "B"
elif pontuacao >= 100:
return "B-"
elif pontuacao >= 80:
return "C"
elif pontuacao >= 60:
return "D"
elif pontuacao >= 40:
return "E"
else:
return "F"

def simular():
try:
dados = {
"ano_construcao": int(entrada_ano.get()),
"area_bruta": float(entrada_area.get()),
"tipo_imovel": tipo_imovel.get(),
"isolamento_paredes": isolamento_paredes.get(),
"tipo_vidro": tipo_vidro.get(),
"corte_termico": corte_termico.get(),
"isolamento_cobertura": isolamento_cobertura.get(),
"sistema_aquecimento": sistema_aquecimento.get(),
"sistema_aqs": sistema_aqs.get(),
"energia_renovavel": energia_renovavel.get()
} pontuacao = calcular_pontuacao(dados)
classe = obter_classe(pontuacao) resultado = f"Pontuação: {pontuacao:.0f}\nClasse Energética: {classe}"
messagebox.showinfo("Resultado", resultado)
except ValueError:
messagebox.showerror("Erro", "Por favor, preencha todos os campos corretamente.") # --- Interface Gráfica ---
root = tk.Tk()
root.title("Simulador de Certificado Energético (PT)")
root.geometry("500x700") frame = ttk.Frame(root, padding=10)
frame.pack(fill="both", expand=True) def criar_rotulo_campo(rotulo, widget):
ttk.Label(frame, text=rotulo).pack()
widget.pack() entrada_ano = ttk.Entry(frame)
entrada_area = ttk.Entry(frame)
tipo_imovel = ttk.Combobox(frame, values=["apartamento", "moradia"])
isolamento_paredes = ttk.Combobox(frame, values=["fraco", "medio", "bom", "excelente"])
tipo_vidro = ttk.Combobox(frame, values=["simples", "duplo", "triplo"])
corte_termico = ttk.Combobox(frame, values=["sim", "nao"])
isolamento_cobertura = ttk.Combobox(frame, values=["inexistente", "fraco", "medio", "bom"])
sistema_aquecimento = ttk.Combobox(frame, values=["caldeira", "ar condicionado", "radiador eletrico", "bomba calor", "nenhum"])
sistema_aqs = ttk.Combobox(frame, values=["esquentador", "termoacumulador", "painel solar termico"])
energia_renovavel = ttk.Combobox(frame, values=["sim", "nao"]) campos = [
("Ano de Construção:", entrada_ano),
("Área Bruta (m²):", entrada_area),
("Tipo de Imóvel:", tipo_imovel),
("Isolamento de Paredes:", isolamento_paredes),
("Tipo de Vidro:", tipo_vidro),
("Caixilharia com Corte Térmico:", corte_termico),
("Isolamento da Cobertura:", isolamento_cobertura),
("Sistema de Aquecimento:", sistema_aquecimento),
("Sistema de Águas Quentes Sanitárias:", sistema_aqs),
("Energia Renovável:", energia_renovavel),
] for rotulo, widget in campos:
criar_rotulo_campo(rotulo, widget) ttk.Button(frame, text="Simular", command=simular).pack(pady=10) root.mainloop()
0