2
respostas

3 possíveis falhas

Estou quebrando a cabeça aqui pois há 3 falhas nesse código. Gostaria de uma ajuda

Falhas:

1ª - Jogador digita uma letra ou palavra na seleção de níveis.

2ª - Jogador digita 0 ou números maiores que 3 na seleção de níveis.

3ª - Jogador digita uma letra ou palavra no chute.

2 respostas

Nos 1º e 2º casos, o código executará a condição else, pois não foi digitado 1 ou 2:

    if(nivel == 1):
        total_de_tentativas = 20
    elif(nivel == 2):
        total_de_tentativas = 10
    else:
        total_de_tentativas = 5

Podemos criar um loop para forçar o jogador a digitar os três números:

    dificuldade_selecionada = False
    while not dificuldade_selecionada:
        nivel = int(input("Defina o nível: "))  # Se essa linha não ficar dentro do while, ficará um loop infinito.
        if(nivel == 1):
            total_de_tentativas = 20
            dificuldade_selecionada = True
        elif(nivel == 2):
            total_de_tentativas = 10
            dificuldade_selecionada = True
        elif(nivel ==3):
            total_de_tentativas = 5
            dificuldade_selecionada = True
        else:
            print("Por favor, digitar 1, 2 ou 3 para o nível de dificuldade.")

No 3º caso, o código imprimirá um erro (exceção ValueError), pois foi esperado valores do tipo int, mas não charactere ou string.

Se quiser um conhecimento mais avançado no Python, você pode fazer com que o código "tente" ("try") transformar em string, mas o usuário desperdiça uma vez no jogo se inserir letras:

print("Tentativa {} de {}".format(rodada, total_de_tentativas))

        chute_str = input("Digite um número entre 1 e 100: ")
        print("Você digitou " , chute_str)
        try:  # Tentativa de fazer o que está na indentação seguinte.
            chute = int(chute_str)  # Transformação em número inteiro.
        except ValueError:  # ValueError é uma exceção que indica que um input de valor não é viável neste caso.
            # Se aconteceu um erro ("exceção" é o nome correto) na transformação acima, as linhas nessa próxima indentação se executarão.
            print("Você deve digitar um número entre 1 e 100, mas não letras!")
            continue

        if(chute < 1 or chute > 100):
            print("Você deve digitar um número entre 1 e 100!")
            continue

Assim, você pode solucionar a 3ª hipótese que você propôs no código. Aprendi no curso Tratamento de erros aqui da Alura, eu recomendo se tiver foco em Python: https://cursos.alura.com.br/course/python-exceptions