2
respostas

Calculando o IMC

import tkinter as tk
from tkinter import messagebox

class CalculadoraIMC:
    def __init__(self, peso: str, altura: str):
        self.peso = self.valida_entrada(peso, "peso")
        self.altura = self.valida_entrada(altura, "altura")
        self.imc = self.calcula_imc()

    def valida_entrada(self, entrada: str, nome: str) -> str:
        try:
            if entrada[0] == '-':
                return f"Erro: O valor de {nome} não pode ser negativo."
                exit()
            return float(entrada)
        except ValueError:
            return f"Erro: Insira um valor válido para {nome}."
            exit()

    def calcula_imc(self) -> float:
        return self.peso / (self.altura ** 2)

    def valida_imc(self) -> str:
        if self.imc < 18.5:
            return f"Abaixo do peso IMC é {self.imc:.2f}"
        elif 18.5 <= self.imc < 25:
            return f"Peso normal IMC é {self.imc:.2f}"
        else:
            return f"Acima do peso IMC é {self.imc:.2f}"


janela = tk.Tk()
janela.title("Calculadora de IMC")
janela.geometry("300x300")

tk.Label(janela, text="Digite seu peso (kg):").pack(pady=5)
entry_peso = tk.Entry(janela)
entry_peso.pack(pady=5)

tk.Label(janela, text="Digite sua altura (m):").pack(pady=5)
entry_altura = tk.Entry(janela)
entry_altura.pack(pady=5)

def calcular():
    peso = entry_peso.get()
    altura = entry_altura.get()
    imc_obj = CalculadoraIMC(peso, altura)
    tk.Label(janela, text=f"{imc_obj.valida_imc()}").pack(pady=5)

btn_calcular = tk.Button(janela, text="Calcular IMC", command=lambda: calcular())
btn_calcular.pack(pady=20)

janela.mainloop()
2 respostas
import tkinter as tk
from tkinter import messagebox

class CalculadoraIMC:
    def __init__(self, peso: str, altura: str):
        self.peso = self.valida_entrada(peso, "peso")
        self.altura = self.valida_entrada(altura, "altura")
        self.imc = self.calcula_imc()

    def valida_entrada(self, entrada: str, nome: str) -> str:
        try:
            if entrada[0] == '-':
                return f"Erro: O valor de {nome} não pode ser negativo."
                exit()
            return float(entrada)
        except ValueError:
            return f"Erro: Insira um valor válido para {nome}."
            exit()

    def calcula_imc(self) -> float:
        return self.peso / (self.altura ** 2)

    def valida_imc(self) -> str:
        if self.imc < 18.5:
            return f"Abaixo do peso IMC é {self.imc:.2f}"
        elif 18.5 <= self.imc < 25:
            return f"Peso normal IMC é {self.imc:.2f}"
        else:
            return f"Acima do peso IMC é {self.imc:.2f}"


janela = tk.Tk()
janela.title("Calculadora de IMC")
janela.geometry("300x300")

tk.Label(janela, text="Digite seu peso (kg):").pack(pady=5)
entry_peso = tk.Entry(janela)
entry_peso.pack(pady=5)

tk.Label(janela, text="Digite sua altura (m):").pack(pady=5)
entry_altura = tk.Entry(janela)
entry_altura.pack(pady=5)

def calcular():
    peso = entry_peso.get()
    altura = entry_altura.get()
    imc_obj = CalculadoraIMC(peso, altura)
    tk.Label(janela, text=f"{imc_obj.valida_imc()}").pack(pady=5)

btn_calcular = tk.Button(janela, text="Calcular IMC", command=lambda: calcular())
btn_calcular.pack(pady=20)

janela.mainloop()

Bom dia! Como está?

A resposta para a atividade ficou incrível!

Notei que você utilizou o Tkinter para criar uma interface gráfica funcional, aplicou de forma eficaz o paradigma orientado a objetos com a classe CalculadoraIMC para organizar a lógica e compreendeu a importância do tratamento de entrada para garantir dados válidos e seguros no cálculo do IMC.

Permaneça postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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