2
respostas

Voltar para o início do If

No último elif, como faço para voltar para o começo ?

print ("Escolha a dificuldade")
print (" (1) Fácil (2) Médio (3) Difícil")

nivel = int(input("Digite um nível: "))

if (nivel == 1):
  tentativas = 20
elif (nivel == 2):
  tentativas = 10
elif (nivel == 3):
  tentativas = 5
elif (nivel < 1 or nivel > 3):
  print("Digite uma opção válida.")
2 respostas

Fiz da seguinte forma:

nivel = 0

while (nivel < 1 or nivel > 3):
    nivel = int(input("Digite um nível: "))

    if (nivel == 1):
      tentativas = 20
    elif (nivel == 2):
      tentativas = 10
    elif (nivel == 3):
      tentativas = 5
    else:
     print("Digite uma opção válida.")

While realmente é uma solução simples nesse caso.

Outra forma que teria de fazer seria criar uma função para pegar o nível, e retornar à função caso o nível fosse inválido.

Ex:

def get_nivel():    
    nivel = int(input("Digite um nível: "))
    if (nivel == 1):
        tentativas = 20
        pass
    elif (nivel == 2):
        tentativas = 10
        pass
    elif (nivel == 3):
        tentativas = 5
        pass
    else:
        print("Digite uma opção válida.")
        return get_nivel()
get_nivel()

Esse é exemplo de uma função recursiva. Apesar de que, de forma geral é bom evitar funções recursivas onde não forem necessárias. Uma função recursiva mal escrita pode gerar o famoso "stack overflow". Uma alternativa para essa recursão seria fazer a tratativa do resultado da função fora da função retornando True ou False, e usando um laço como você fez com o while. Por exemplo:

def get_nivel():    
    nivel = int(input("Digite um nível: "))
    if (nivel == 1):
        tentativas = 20
        return True
    elif (nivel == 2):
        tentativas = 10
        return True
    elif (nivel == 3):
        tentativas = 5
        return True
    else:
        print("Digite uma opção válida.")
        return False

validateInput = False
while not validateInput:
    validateInput = get_nivel()

Nesse caso em específico você se resolveu bem com while já, mas como a tendência em códigos mais extensos/complexos é que se foque em chamada de funções, e a manipulação de retornos de função para decidir a validade do resultado obtido, talvez esse tipo de solução venha a ser útil.