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

[Dúvida] Criar um loop até a opcao correta ser inserida

Olá,

Nas opcoes desse exercicio, se o valor inserido for errado o programa finaliza sem um valor correto. Eu gostaria de criar um loop para fazer o usuario tentar novamente até o valor inserido ser aceito. Para isso eu coloquei a funcao "configurar_tempo_foco()" abaixo do print. Ficou assim:

def configurar_tempo_foco():
    
    tempo = int(input("Digite o tempo de foco (25-45 min): "))
    if tempo < 25:
        print("Valor muito baixo. Configure um tempo maior ou igual a 25 minutos.")
        configurar_tempo_foco()
    elif tempo > 45:
        print("Valor muito alto. Configure um tempo menor ou igual a 45 minutos.")
        configurar_tempo_foco()
    else:
        print("Tempo configurado para", tempo, "minutos.")

Minha dúvida é: seria essa a melhor alternativa? Ou tem alguma maneira melhor de criar um loop? Na alternativa C seria mais facil pois seria necessario apenas colocar abaixo do print do else. Porém fiquei me perguntando se existe alguma forma simplificada de criar um loop caso inumeras condicionais necessitem reiniciar o programa.

Outra duvida: Qual seria a melhor alternativa para reiniciar o programa caso nao seja inserido um numero inteiro? Nao consegui pensar em nenhuma solucao para esse problema.

1 resposta
solução!

Oi, xará! A solução com o loop while é mais simples e segura do que usar recursão, e o try/except é a forma mais comum de lidar com entradas inválidas (como strings em vez de inteiros).

Vamos por partes:

Sobre o loop para tentar novamente: A forma como você fez com recursão (chamando a função de novo dentro dela) funciona, mas não é a melhor opção, principalmente porque pode levar a um erro de "RecursionError" se o usuário errar várias vezes, já que a função vai sendo chamada muitas vezes e o Python tem um limite para recursões. O melhor é usar um loop while, que vai garantir que o código continue pedindo a entrada até que o valor seja válido.

Aqui está um exemplo mais simples usando um while:

def configurar_tempo_foco(): while True: try: tempo = int(input("Digite o tempo de foco (25-45 min): ")) if tempo < 25: print("Valor muito baixo. Configure um tempo maior ou igual a 25 minutos.") elif tempo > 45: print("Valor muito alto. Configure um tempo menor ou igual a 45 minutos.") else: print(f"Tempo configurado para {tempo} minutos.") break # Sai do loop quando o tempo for válido except ValueError: print("Por favor, insira um número inteiro válido.")

Usando o while True, o programa vai continuar pedindo o valor até o usuário digitar um número válido dentro do intervalo. O break serve para sair do loop quando o valor está certo. E se o usuário digitar algo que não seja um número, o except vai capturar o erro e pedir para tentar de novo.

Sobre reiniciar o programa se o usuário não digitar um número inteiro: A melhor maneira de lidar com isso é justamente com o try/except para capturar o erro quando o usuário inserir algo que não seja um número. Isso faz o programa não quebrar e permite que o usuário tente novamente. O código que eu escrevi já cobre essa situação de forma simples.

Se o usuário digitar qualquer coisa que não seja um número, o except vai ser acionado e ele será avisado para tentar novamente, sem precisar reiniciar o programa inteiro