2
respostas

Dúvida sobre o funcionamento do 'continue'

Olá a todos. No curso foi ensinado a tratar o 'input' para não receber números menores que 1 e nem receber números maiores que 100. Porém quando isso ocorre, o programa conta uma tentativa. Eu fiz sem o 'for' conforme foi ensinado e permaneci com o 'while' para que não fosse desperdiçada uma tentativa caso o usuário digitasse um número fora do solicitado no input. A minha dúvida é: Como o Python está entendendo que NÃO é para continuar incrementando as rodadas? Quando eu uso o 'continue' ele continua seguindo as instruções e no final existe ainda o incremento. Por que com o "erro" o incremento não é feito? Segue o código:

num_secreto = 43

tentativas = 5

rodada = 1

while(rodada <= tentativas):

print("Rodada: {} de {} ".format(rodada, tentativas))
chute_str = input("Digite o seu número (1 a 100): ")
chute = int(chute_str)
erro = chute < 1 or chute > 100
print("Você digitou o número: ", chute)
if (erro):
    print("Por favor, verifique o número digitado e tente novamente")
    continue
if(num_secreto == chute):
    print("Parabéns, você acertou!")
    break
elif(chute > num_secreto and chute <= num_secreto + 10):
    print("Errou, o chute foi maior que o número secreto, mas foi bem perto!")
elif(chute < num_secreto and chute >= num_secreto - 10):
    print("Errou, o chute foi menor que o número secreto, mas foi bem perto!")
elif (chute < num_secreto):
    print("Errou, o chute foi menor que o número secreto")
elif (chute > num_secreto):
    print("Errou, o chute foi maior que o número secreto")
rodada = rodada + 1

print("Fim do jogo")

2 respostas

Olá Gustavo, tudo certo?

Para contornar o seu problema você pode adicionar um contador antes do continue, dessa forma:

rodada = rodada - 1

Acredito que dessa forma o seu problema será resolvido.

A título de curiosidade, você pode usar o contador dessa maneira, que funciona da mesma maneira:

rodada--

ou

rodada -= 1

espero ter ajudado!

Olá Diego, tudo bem e por aí? Você teve a mesma lógica que eu tive e quando eu fiz isso que você falou, o sistema tirava uma tentativa, por exemplo:

Tentativa 2 de 5: usuário digita um número não permitido

retorna: Tentativa 1 de 5: Por favor digite um número de 1 a 100

Mas quando eu fiz o código que coloquei no escopo da dúvida, o sistema faz o que eu queria (não desperdiça uma tentativa se o usuário digitar um número errado)

Porém eu gostaria de saber o motivo disso acontecer, visto que foi usado o 'continue' e eu não precisei fazer "rodada = rodada - 1" no momento que o "erro" ocorre.