Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Calculando o IMC

import os


def clear():
    os.system('cls' if os.name == 'nt' else 'clear')

def imc_calc():
    clear()
    try:
        peso = float(input("Digite seu peso (kg): "))
        altura = float(input("Digite sua altura (m): "))

        if altura <= 0:
            print("A altura deve ser maior que zero.")
            input("\nENTER para continuar...")
            return

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

        if imc < 18.5:
            print("Você está abaixo do peso.")
        elif imc < 25:
            print("Você está com peso normal.")
        else:
            print("Você está acima do peso.")

    except ValueError:
        print("Erro: digite apenas números válidos.")

    input("\nPressione ENTER para continuar.")

def menu():
    while True:
        clear()
        print("1. Iniciar")
        print("2. Sair")

        op = input("\nEscolha uma opção: ")

        match op:
            case "1":
                imccalc()
            case "2":
                break
            case :
                print("Opção inválida.")
                input("Pressione ENTER para voltar ao menu...")


menu()

fiquei com uma dúvida:
às vezes eu digito números fracionados usando vírgula em vez de ponto (ex: 1,75 ao invés de 1.75).

Existe alguma forma de fazer o Python aceitar tanto vírgula quanto ponto em números float?

1 resposta
solução!

Oi, Vinicius, como vai?

Seu código ficou bem organizado, principalmente pela separação das funções e pelo uso do tratamento de exceções com try e except. A lógica do cálculo do IMC também está correta e atende ao que a atividade propõe.

Existe sim uma forma de aceitar tanto vírgula quanto ponto. Uma abordagem comum é substituir a vírgula por ponto antes de converter para float.

Exemplo:

peso = float(input("Digite seu peso (kg): ").replace(",", "."))
altura = float(input("Digite sua altura (m): ").replace(",", "."))

Dessa forma, o Python consegue interpretar corretamente valores como 1,75 e 1.75.

Só vale observar um detalhe no seu código: dentro do match, você chamou imccalc(), mas a função foi definida como imc_calc(). Isso causaria um erro de função não encontrada.

Outro ponto é este trecho:

case :

Essa sintaxe gera erro. O ideal seria usar:

case _:

Assim o match consegue tratar qualquer opção inválida.

Parabéns pelo desenvolvimento da atividade e por compartilhar sua solução no fórum. Continue praticando e trazendo suas dúvidas, o fórum segue à disposição para ajudar no seu aprendizado.

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