Mundo em Python

Probabilidade de morte anual

from tkinter import *
import math
def obter_qx_completo(idade):
if idade == 0: return 0.00242
if 1 <= idade <= 14: return 0.00010
if 15 <= idade <= 24: return 0.00030
if 25 <= idade <= 39: return 0.00055
if 40 <= idade <= 110:
return 0.00003 * math.exp(0.088 * idade)
return 1.0

def calcular_estatisticas(idade_atual, horizonte_anos):
prob_viver = 1.0
for i in range(horizonte_anos):
idade_loop = idade_atual + i
qx = obter_qx_completo(idade_loop)
prob_viver *= (1 - qx)
qx_atual = obter_qx_completo(idade_atual)
prob_morte_acumulada = 1 - prob_viver
return qx_atual, prob_morte_acumulada # Interface Tkinter
root = Tk()
root.geometry("700x400")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Probabilidade de morte anual") titulo = Label(text="Probabilidade de morte anual", font=("Arial", 28, "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.13, rely=0.05) Label(text="Idade Actual:", font=("Arial", 25, "bold"), bg="#103030", fg="#49e3e3").place(relx=0.2, rely=0.25)
Label(text="Anos a analisar:", font=("Arial", 25, "bold"), bg="#103030", fg="#49e3e3").place(relx=0.13, rely=0.45) idade_actual = StringVar()
idade_actual_entrada = Entry(textvariable=idade_actual, font=("Arial", 12, "bold"), bg="white", fg="blue", justify='center')
idade_actual_entrada.place(relx=0.55, rely=0.28, relwidth=0.35)
idade_actual_entrada.focus() Anos_analisar = StringVar()
Anos_analisar_entrada = Entry(textvariable=Anos_analisar, font=("Arial", 12, "bold"), bg="white", fg="blue", justify='center')
Anos_analisar_entrada.place(relx=0.55, rely=0.48, relwidth=0.35) resultado_texto = Label(text="", font=("Arial", 12, "bold"), bg="#103030", fg="white", justify='left')
resultado_texto.place(relx=0.05, rely=0.8, relwidth=0.9, relheight=0.15) # Funções de botão
def limpar():
Anos_analisar_entrada.delete(0, END)
idade_actual_entrada.delete(0, END)
resultado_texto.config(text="") def app():
try:
idade_input = int(idade_actual.get())
anos_input = int(Anos_analisar.get())
qx_atual, qx_acumulada = calcular_estatisticas(idade_input, anos_input)
mensagem = (
f"Risco de óbito no próximo ano: {qx_atual * 100:.4f}%\n"
f"Risco acumulado em {anos_input} anos: {qx_acumulada * 100:.2f}%\n"
f"Probabilidade de celebrar {idade_input + anos_input} anos: {(1 - qx_acumulada) * 100:.2f}%"
)
resultado_texto.config(text=mensagem)
except ValueError:
resultado_texto.config(text="Por favor, insira valores numéricos válidos.") Button(text="Calcular", bd=2, bg='#107db2', fg='white', font=('verdana', 12, 'bold'), command=app).place(relx=0.1, rely=0.65, relwidth=0.25, relheight=0.1)
Button(text="Limpar", bd=2, bg='#107db2', fg='white', font=('verdana', 12, 'bold'), command=limpar).place(relx=0.4, rely=0.65, relwidth=0.25, relheight=0.1)
Button(text="Sair", bd=2, bg='#107db2', fg='white', font=('verdana', 12, 'bold'), command=root.destroy).place(relx=0.7, rely=0.65, relwidth=0.25, relheight=0.1) root.mainloop()
0