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.

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
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!!")