2
respostas

Retornar caso o nível do jogo seja maior que 3

Olá! Eu fiz com que o nível do jogo deve ser escolhido entre a dificuldade 1 a 3, porém, o jogo finaliza caso não seja escolhido o número certo. Mas eu queria que voltasse para a seleção de dificuldade ao invés de finalizar o jogo. Poderiam me ajudar? Segue abaixo o código:

import random

def jogar(): print("****") print("Bem Vindo ao Jogo de Adivinhação") print("****")

numero_secreto = random.randrange(1,101)
total_de_tentativas = 0
pontos = 1000


print("Qual o nível de dificuldade?")
print("(1) Fácil (2) Médio (3) Difícil")

nivel = int(input("Defina o nível:"))

if(nivel == 1):
    print("Fácil")
    total_de_tentativas = 20
    pass
elif(nivel == 2):
    print("Médio")
    total_de_tentativas = 10
    pass
elif(nivel == 3):
    print("Difícil")
    total_de_tentativas = 5
else:
    print('Escolha o valor entre 1 e 3')



for rodada in range(1, total_de_tentativas + 1):
    print("Tentativa {} de {}".format(rodada, total_de_tentativas))

    chute_str = input("Digite um número entre 1 e 100:")
    print("Você digitou", chute_str)
    chute = int(chute_str)

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

    acertou = chute == numero_secreto
    maior = chute > numero_secreto
    menor = chute < numero_secreto


    if (acertou):
        print("Você acertou e fez {} pontos!".format(pontos))
        break
    else:
        if (maior):
                print("Você errou! O seu chute foi maior que o número secreto!")
        elif (menor):
                print("Você errou! O seu chute foi menor que o número secreto!")
        pontos_perdidos = abs(numero_secreto - chute)
        pontos = pontos - pontos_perdidos

print("Fim do jogo")

if(name == "main"): jogar()

2 respostas

Olá Paulo, tudo bem com você?

Meus parabéns pela implementação do código, fico feliz que tenha compartilhado com a comunidade do fórum Alura.

Uma forma que podemos está chegando ao resultado esperado onde caso o usuário forneça um valor menor que 1 ou maior que 3 o código peça outra entrada, será fazendo o uso do laço de repetição while em conjunto com a cláusula True.

Colocaremos a parte do código onde a entrada do usuário é solicitada (input) para ser repetida até que determinada ação ocorra, nesse caso até que o usuário forneça um valor correto, entre 1 e 3.

Nosso laço de repetição while ficará da seguinte forma.

    while True:
        nivel = int(input("Defina o nível:"))

        if (nivel == 1):
            print("Fácil")
            total_de_tentativas = 20
            break
        elif (nivel == 2):
            print("Médio")
            total_de_tentativas = 10
            break
        elif (nivel == 3):
            print("Difícil")
            total_de_tentativas = 5
            break
        else:
            print('Escolha o valor entre 1 e 3')

Note que foi feito o uso da cláusula break para finalizar a repetição do laço while. A parte de coleta da entrada do usuário foi inserida dentro do laço while, as demais partes do código permaneceram conforme estavam.

Deixo abaixo o código completo para que possa ser comparado com o seu código.

import random


def jogar():
    print("********************************")
    print("Bem Vindo ao Jogo de Adivinhação")
    print("********************************")

    numero_secreto = random.randrange(1, 101)
    total_de_tentativas = 0
    pontos = 1000
    print("Qual o nível de dificuldade?")
    print("(1) Fácil (2) Médio (3) Difícil")

    while True:
        nivel = int(input("Defina o nível:"))

        if (nivel == 1):
            print("Fácil")
            total_de_tentativas = 20
            break
        elif (nivel == 2):
            print("Médio")
            total_de_tentativas = 10
            break
        elif (nivel == 3):
            print("Difícil")
            total_de_tentativas = 5
            break
        else:
            print('Escolha o valor entre 1 e 3')


    for rodada in range(1, total_de_tentativas + 1):
        print("Tentativa {} de {}".format(rodada, total_de_tentativas))

        chute_str = input("Digite um número entre 1 e 100:")
        print("Você digitou", chute_str)
        chute = int(chute_str)

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

        acertou = chute == numero_secreto
        maior = chute > numero_secreto
        menor = chute < numero_secreto

        if (acertou):
            print("Você acertou e fez {} pontos!".format(pontos))
            break
        else:
            if (maior):
                print(
                    "Você errou! O seu chute foi maior que o número secreto!")
            elif (menor):
                print(
                    "Você errou! O seu chute foi menor que o número secreto!")
            pontos_perdidos = abs(numero_secreto - chute)
            pontos = pontos - pontos_perdidos

    print("Fim do jogo")


if (__name__ == "__main__"):
    jogar()

Para aprimorar ainda mais o seu aprendizado sobre o laço de repetição while recomendo a leitura do seguinte artigo, que irá apresentar com detalhes sobre a execução desse laço.

O artigo acima está em inglês, caso tenha dificuldade com o idioma recomendo o uso do tradutor do navegador.

Lembre-se que pode contar sempre com o fórum, seja para tirar suas dúvidas ou para compartilhar o seu desenvolvimento.

Fico à disposição.

Abraços e bons estudos.

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

Olá Paulo,

Assim como o Rafael sugeriu podemos colocar um lanço de repetição;

nivel = 0
while (nivel not in [1,2,3]): 
    nivel = int(input("Defina o nível:"))
    if(nivel == 1):
        print("Fácil")
        total_de_tentativas = 20
        #pass
    elif(nivel == 2):
        print("Médio")
        total_de_tentativas = 10
        #pass
    elif(nivel == 3):
        print("Difícil")
        total_de_tentativas = 5
    else:
        print('Escolha o valor entre 1 e 3')
        continue