1
resposta

Não perco as tentativas quando estou usando o laço WHILE

Percebi que quando estou usando o laço "WHILE", não perco uma tentativa ao digitar o valor "0" ou "101".

Quanto estou usando o laço "FOR" eu perco as tentativas quando digito os valores que não são aceitos, ou seja o "0" e o "101" (Como acontece no exemplo do professor)

Alguém sabe me dizer porque isso acontece?

MEU CÓDIGO COM "WHILE" :

print("****") print("Bem vindo ao Jogo da Adivinhação") print("****")

numero_secreto = 52 total_de_tentativas = 3 rodada = 1

while (rodada <= total_de_tentativas): print("Tentativa {} de {}".format(rodada, total_de_tentativas)) chute_do_usuario = input("Digite um número entre 1 e 100: ") print("Você digitou: ", chute_do_usuario) chute = int(chute_do_usuario)

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

#Abaixo, declarei as variáveis para facilitar o entendimento a quem visualizar o meu código
acertou = chute == numero_secreto
maior = chute > numero_secreto
menor = chute < numero_secreto

if (acertou):
    print("PARABÉNS, 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

Bom dia Luiz, tudo bem?

Quando você utiliza o for, o código rodará um certo número de vezes definido no seu range. Exemplo:

for i in range(5):
    if chute < 1 or chute > 100:
        print("Você deve digitar um número entre 1 e 100!")
        continue

Significa que o bloco de código abaixo disso rodará 5 vezes. Quando você digita o número 0 ou 101, o for prosseguirá para a próxima rodada do código, fazendo com que você perca uma das tentativas.

Já no While, como é o caso do seu código, o bloco de código abaixo, quando chute for 0 ou 101:

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

Fará com que o While rode novamente checando a condição rodada<=total_de_tentativas.

Mas repare que, como o resto do código abaixo é ignorado, a última linha do seu código não é executada, portanto rodada = rodada + 1 não acontecerá. E o while vai rodar usando a quantidade de rodadas que você já tinha.

Espero que tenha sido claro.

Estou à disposição. Bons estudos!