3
respostas

Não descontar rodada quando número informado é maior que 100 ou menor que 1

Estive tentando implementar a seguinte funcionalidade: Quando o usuário errar o número informando um valor maior que 100 ou menor que 1, devolver a rodada utilizada, de modo que ele não perca esse chute. Tentei colocar uma linha de código dentro do if que verifica se o chute foi menor que 1 ou maior que 100: "rodada = rodada - 1". Porém, toda vez que a aplicação retorna pro início do laço for, mesmo que a rodada tenha sido decrementada no trecho de código que inseri, no início do for ele sempre altera o valor que eu indiquei, por exemplo:

*     Na rodada de número 1, eu informo o número 856, ele dá a mensagem que eu devo digitar um número entre 1 e 100, retorna o valor de rodada para 0 (zero), porém, ao entrar no for novamente, o valor da variável rodada é alterado para 2. Qual seria o motivo disso acontecer? Acredito que se eu tentar implementar isso utilizando do laço while, não terei esse tipo de problema. Como eu poderia contornar essa situação? Desde já, agradeço.
3 respostas

Poderia compartilhar seu código em Python pra ficar mais fácil de analisar?

Claro, este é meu código:

import random

print("********************************")
print("Bem vindo no jogo de Advinhação!")
print("********************************")

#numero_secreto = 42
#numero_secreto = random.randrange(1,101)
numero_secreto = random.randint(1,100)
total_tentativas = 0
rodada = 1
#print(numero_secreto)

print("Qual o nível de dificuldade?")
print("1 - FÁCIL\n2 - MÉDIO\n3 - DIFÍCIL")

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

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

# while(rodada <= total_tentativas):
for rodada in range(1, total_tentativas + 1):
    print(rodada)
    print("Tentativa {} de {}".format(rodada, total_tentativas))
    chute_str = input("Digite um número entre 1 e 100: ")
    chute = int(chute_str)
    print("Você digitou", chute_str)

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

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

    if (acertou):
        print("VOCÊ ACERTOU :D")
        break
    else:
        if (maior):
            print("Você Errou :( \nO seu chute foi maior que o número secreto!")
        if (menor):
            print("Você Errou :( \nO seu chute foi menor que o número secreto!")
       #rodada = rodada + 1


print("Fim do Jogo!!")

Ok, se eu entendi bem você quer fazer uma validação no número digitado pelo usuário.

Você pode fazer a validação dessa forma:

while (chute < 1 or chute > 100):
    print("Você deve digitar um número entre 1 e 100")
    chute_str = input("Digite um número entre 1 e 100: ")
    chute = int(chute_str)

Aplicando no seu código ficaria assim:

import random

print("********************************")
print("Bem vindo no jogo de Advinhação!")
print("********************************")

#numero_secreto = 42
#numero_secreto = random.randrange(1,101)
numero_secreto = random.randint(1,100)
total_tentativas = 0
rodada = 1
#print(numero_secreto)

print("Qual o nível de dificuldade?")
print("1 - FÁCIL\n2 - MÉDIO\n3 - DIFÍCIL")

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

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

# while(rodada <= total_tentativas):
for rodada in range(1, total_tentativas + 1):
    print(rodada)
    print("Tentativa {} de {}".format(rodada, total_tentativas))
    chute_str = input("Digite um número entre 1 e 100: ")
    chute = int(chute_str)
    print("Você digitou", chute_str)

    while (chute < 1 or chute > 100):
        print("Você deve digitar um número entre 1 e 100")
        chute_str = input("Digite um número entre 1 e 100: ")
        chute = int(chute_str)

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

    if (acertou):
        print("VOCÊ ACERTOU :D")
        break
    else:
        if (maior):
            print("Você Errou :( \nO seu chute foi maior que o número secreto!")
        if (menor):
            print("Você Errou :( \nO seu chute foi menor que o número secreto!")
       #rodada = rodada + 1


print("Fim do Jogo!!")