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

[Projeto] Dúvida em python

estou fazendo um código para a faculdade e me deparei com a seguinte situação:

while True:
        decisao = input("""Digite qual área do cubo deseja calcular: 
                            1) Área da base do cubo.
                            2) Área da lateral do cubo.
                            3) Área total do cubo.
                        
                            """)
        
        if decisao == 1:
            while True:
                try:
                    a = float(input("Digite o valor da aresta do cubo: "))
                    break
                except ValueError:
                    print("Por favor, digite um número válido para a  aresta do cubo.")
            area = a**2
            print(f"O valor da área da base do cubo é de {area}{medida}.")
            return area
    
        if decisao == 2:
            while True:
                try:
                    a = float(input("Digite o valor da aresta do cubo: "))
                    break
                except ValueError:
                    print("Por favor, digite um número válido para a  aresta do cubo.")
            area = 4*(a**2)
            print(f"O valor da área da lateral do cubo é de {area}{medida}.")
            return area
        
        if decisao == 3:
            while True:
                try:
                    a = float(input("Digite o valor da aresta do cubo: "))
                    break
                except ValueError:
                    print("Por favor, digite um número válido para a  aresta do cubo.")
            area = 6*(a**2)
            print(f"O valor da área total do cubo é de {area}{medida}.")
            return area
        
        if decisao ==  math.isnan(a):
            print("Por favor, digite apenas as opções  válidas.")

não sei o que fazer para encerrar a repetição caso seja selecionada uma das opções viáveis, como posso fazer isso?

1 resposta
solução!

Olá Matheus! Como vai?

Fiz alguns ajustes no seu código, observe:

while True:
        decisao = int(input("""Digite qual área do cubo deseja calcular: 
                            1) Área da base do cubo.
                            2) Área da lateral do cubo.
                            3) Área total do cubo.
                        
                            """))
        
        if decisao == 1:
            while True:
                try:
                    a = float(input("Digite o valor da aresta do cubo: "))
                    break
                except ValueError:
                    print("Por favor, digite um número válido para a  aresta do cubo.")
            area = a**2
            print(f"O valor da área da base do cubo é de {area}{medida}.")
            break
    
        elif decisao == 2:
            while True:
                try:
                    a = float(input("Digite o valor da aresta do cubo: "))
                    break
                except ValueError:
                    print("Por favor, digite um número válido para a  aresta do cubo.")
            area = 4*(a**2)
            print(f"O valor da área da lateral do cubo é de {area}{medida}.")
            break
        
        elif decisao == 3:
            while True:
                try:
                    a = float(input("Digite o valor da aresta do cubo: "))
                    break
                except ValueError:
                    print("Por favor, digite um número válido para a  aresta do cubo.")
            area = 6*(a**2)
            print(f"O valor da área total do cubo é de {area}{medida}.")
            break
        
        else:
            print("Por favor, digite apenas as opções  válidas. \n")
            continue
  • Transformei os ifs em apenas uma condição aninhada, com o uso de elif e else.
    • Utilizar o else faz com que a verificação de math.isnan(a) não seja necessária. Afinal, a só está definido dentro dos blocos try.
    • Utilizei o continue após a mensagem, mantendo o loop até que uma opção válida seja inserida.
  • Converti decisao para inteiro já no input. Isso possibilita a comparação com inteiros em cada condição.
    • Nos cálculos, o python converte automaticamente para inteiros os valores que recebeu no input ,mas isso não acontece em comparações.
  • Retirei os returns de cada condição. O valor já está sendo retornado no print. O uso de return faria mais sentido se você estivesse utilizando funções e desejasse utilizar o valor em outro lugar do código.
  • No lugar do return, utilizei break. Assim, sempre que um cálculo for finalizado, o loop encerra.

Outra coisa que você pode fazer é adicionar uma opção de decisao específica para encerrar o programa. Quando a pessoa usuária digitar 4, por exemplo, o loop encerra sem fazer nenhum cálculo.

Espero ter ajudado, Matheus!

Continue se dedicando.

Abraço.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!