Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Função Continue Não Avança para a Próxima Iteração

Olá pessoal,

Estive aqui testando a função "continue" e, no código que fiz, quando o "continue" é acionado, a função se mantém na mesma iteração (o que, na verdade, eu acho até melhor).

Explicando melhor: quando se digita um número fora do intervalo 1 a 100 na primeira iteração, o código te dá uma nova oportunidade de digitar um número, ainda na iteração "1 de 3". Vejam o retorno do código:

*********************************
Bem vindo ao jogo de Adivinhação!
*********************************
Tentativa 1 de 3
Digite um número de 1 a 100: 2000
Você digitou:  2000
Você deve digitar um número entre 1 e 100! 
Tentativa 1 de 3
Digite um número de 1 a 100: 1950
Você digitou:  1950
Você deve digitar um número entre 1 e 100! 
Tentativa 1 de 3
Digite um número de 1 a 100: 40
Você digitou:  40
Você errou! O seu chute foi menor que o número secreto.
Tentativa 2 de 3
Digite um número de 1 a 100: 41
Você digitou:  41
Você errou! O seu chute foi menor que o número secreto.
Tentativa 3 de 3
Digite um número de 1 a 100: 19402
Você digitou:  19402
Você deve digitar um número entre 1 e 100! 
Tentativa 3 de 3
Digite um número de 1 a 100: 42
Você digitou:  42
Você acertou!
Fim do jogo

Seria isso uma diferença entre o python 3.5 e o python 3.8? Ou algo de "errado" que eu fiz no meu código (transcrito abaixo)?

Obrigado!


print("*********************************")
print("Bem vindo ao jogo de Adivinhação!")
print("*********************************")

numero_secreto = 42

total_de_tentativas = 3
rodada = 1

while (rodada <= total_de_tentativas):

    print("Tentativa {} de {}".format(rodada, total_de_tentativas))
    chute_str = input("Digite um número de 1 a 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 = numero_secreto == chute
    maior = chute > numero_secreto
    menor = chute < numero_secreto

    if (acertou):
        print("Você acertou!")
        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.")

    rodada = rodada + 1

print("Fim do jogo")
1 resposta
solução!

Olá Lucas, tudo bem com você?

Seria isso uma diferença entre o python 3.5 e o python 3.8? Ou algo de "errado" que eu fiz no meu código (transcrito abaixo)?

Então, pode ficar tranquilo que essa base de python sempre se mantém, seja a 3.0 até 3.8 :)

Agora em relação ao seu código, esse comportamento está acontecendo porque você utilizou o while ao invés do for :)

Acontece que quando utilizamos o continue estamos recomeçando o laço, e no seu exemplo, ainda não chegamos na parte de incrementar o valor de rodada ( última linha do while), dessa forma continuamos na mesma iteração :)

Quando utilizamos o for depois de um continue ele faz o incremento automaticamente, por isso no exemplo do instrutor teve uma nova iteração :)

Para ter esse mesmo comportamento teríamos que replicar o código dentro do if:

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

Mas concordo plenamente que a sua solução sem aumentar uma rodada ficou mais legal, então eu deixaria da sua forma :)

Então a regrinha sempre vai ser essa, quando temos o for o continue irá incrementar uma nova iteração, quando utilizamos whilese não tivermos passado pelo o incremento iremos nos manter na mesma!

Abraços e Bons Estudos :)