Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Diferença entre while e for

Oi, gente! Estava fazendo o primeiro curso de Python, escrevendo o jogo de advinhação com o professor, mas decidi deixar o comando while ao invés do comando for. Então percebi uma diferença entre o meu código e o do professor, já que, no comando while, quando eu coloquei o comando "continue" ele não continuou o jogo como no comando for, ele repetiu a pergunta na mesma rodada, por que isso aconteceu? Exemplo de uma possível resposta:

Tentativa 1 de 3 Digite seu um número entre 1 e 100: 0 Digite um número entre 1 e 100! Tentativa 1 de 3 Digite seu um número entre 1 e 100: 101 Digite um número entre 1 e 100! Tentativa 1 de 3 Digite seu um número entre 1 e 100: 42 Parabéns, você acertou!

print('********************************')
print('Bem-vindo ao jogo de Advinhação!')
print('********************************')

número_secreto = 42
tentativas = 3
rodada = 1

while (rodada <= tentativas):
    print('Tentativa {} de {}'.format(rodada, tentativas))
    chute = int(input('Digite seu um número entre 1 e 100: '))

    if(chute < 1 or chute> 100):
        print('Digite um número entre 1 e 100!')
        continue

    acertou = chute == número_secreto
    maior = chute > número_secreto
    menor = chute < número_secreto

    if (acertou):
        print('Parabéns, você acertou!')
        break
    else:
        if (maior):
            print('Você chutou acima do número correto!')
        elif (menor):
            print('Você chutou abaixo do número correto!')
    rodada = rodada + 1

print('Fim do jogo!')
4 respostas
solução!

Bom dia, Yago, tudo bem?

Ele não está passando a rodada para a próxima porque o incremento da variável rodada ocorre no final do loop while. Porém, quando você digita um número fora do intervalo [1, 100], ele pula uma iteração do laço através do if, que fica no começo do while. Dessa forma, ele nunca consegue chegar no incremento da variável para poder passar a rodada.

Para solucionar isso e manter a estrutura do while, basta fazer o seguinte:

if(chute < 1 or chute> 100):
    print('Digite um número entre 1 e 100!')
    rodada += 1  # equivalente a rodada = rodada + 1
    continue

Espero ter ajudado! Bons estudos!

Oi, Gian! Obrigado pela resposta! Mas ainda tenho uma dúvida: o comando "continue" não faz com que ele continue o código até o final do laço? Não entendi por que ele volta para o início sem antes passar pelo código do laço, por conta do continue. Ainda sou iniciante, então talvez seja uma pergunta boba kkkkkkk

Bom dia, Yago!

Não se preocupe em perguntar, toda pergunta é relevante!

O que o comando continue faz é parar o laço no momento em que é encontrado e ir para a próxima iteração do loop. Você vai estar forçando a iteração a terminar naquele exato ponto, falando pro seu programa ignorar tudo que tem embaixo dele e voltar ao início do loop, começando a próxima iteração. No caso do for, como a variável de controle de iteração é definida na própria linha em que você começa o for, ela vai ser incrementada automaticamente. Como no while você faz um gerenciamento manual dessa variável de controle, dependendo de onde você coloca ela no seu código pode ser que encontre um problema como aconteceu com você. Mas nem se preocupe com esse tipo de erro porque todos já fizemos algo similar quando estávamos aprendendo!

Bons estudos e um abraço, Yago!

Agora entendi, muito obrigado mesmo pela resposta!