1
resposta

[Solução] Calculando IMC

def pega_float(pergunta: str, opcoes: list[float] = []) -> float:
    """
    Solicita uma entrada do usuário, garantindo que seja um número de ponto
    flutuante (float) e, opcionalmente, que esteja dentro de uma lista de opções válidas.

    A função converte automaticamente vírgulas (',') para pontos ('.') antes
    de tentar a conversão para float.

    Args:
        pergunta: A mensagem (prompt) a ser exibida ao usuário.
        opcoes: Uma lista de floats válidos. Se a lista estiver vazia
            (padrão), qualquer número de ponto flutuante é aceito.

    Returns:
        O número de ponto flutuante digitado pelo usuário.

    Raises:
        ValueError: Se a entrada não puder ser convertida para `float`
            ou se o float digitado não estiver na lista de opções válidas.
    """

    resposta: float = 0.0
    
    try:
        resposta = float(input(pergunta).replace(',', '.'))
    except ValueError:
        raise ValueError('Entrada inválida!')
    
    if opcoes == []:
        return resposta
    
    if resposta in opcoes:
        return resposta
    raise ValueError('Opção inválida!')

def main() -> None:
    """
    Função principal do programa para calcular e classificar o Índice de Massa Corporal (IMC).

    Solicita ao usuário o peso (kg) e a altura (m) usando a função `pega_float`
    para garantir entradas numéricas válidas. Calcula o IMC e imprime a
    classificação (abaixo do peso, peso ideal ou acima do peso).
    """

    NORMAL_IMC: float = 18.5
    ALTO_IMC: float = 25

    imc: float = 0.0
    peso: float = 0.0
    altura: float = 0.0

    while True:
        try:
            peso = pega_float('\nDigite seu peso (kg): ')
            altura = pega_float('\nDigite sua altura (m): ')
            break
        except ValueError as e:
            print(e)
            continue

    imc = peso / (altura ** 2)
    
    print(f"Seu IMC é: {imc:.2f}")

    if imc < NORMAL_IMC:
        print(f'Você está abaixo do peso.')
    elif imc >= NORMAL_IMC and imc < ALTO_IMC:
        print(f'Você está no peso ideal.')
    elif imc >= ALTO_IMC:
        print(f'Você está acima do peso.')
    else:
        print(f'Erro ao encontrar categoria de IMC.')

if __name__ == '__main__':
    main()

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Oi, Mozert! Como vai?

Agradeço por compartilhar.

Gostei muito da forma como você estruturou a função pega_float, garantindo entradas seguras e tratativas de erro claras. A separação entre a coleta dos dados e o cálculo do IMC deixou o código organizado e fácil de entender.

Continue praticando esse tipo de estrutura modular, é uma ótima prática para projetos maiores.

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