1
resposta

Porque as condições devem estar dentro do laço while? (Ainda não compreendo)

Olá amigos! Por gentileza, poderiam me ajudar na seguinte dúvida? Sei que já foi perguntado isso em postagens anteriores, mas ainda não entendi o porquê as condições devem estar dentro do laço do While. Deixei um código como exemplo, de uma estrutura fora do laço while, para exemplificar minha dúvida

print("*********************************")
print("bem vindo ao jogo da adivinhação")
print("*********************************")

numero_secreto = 42
total_tentativas = 3

chute_str = input("Digite seu numero")
print("Você digitou o numero", chute_str)
chute = int(chute_str)

acertou = chute == numero_secreto
maior = chute > numero_secreto
menor = chute < numero_secreto

while(total_tentativas > 0):

    if (acertou):
         print("Você acertou")
    else:
        if(maior):
                    print("O numero digitado esta acima do numero secreto")
        elif(menor):
                    print("O numero digitado esta abaixo do numero secreto")

        print("Fim do jogo")
1 resposta

Oi Alisson! Tudo bem com você?

O laço vai repetir todo aquele código que está "dentro" dele, enquanto a varável rodada for menor ou igual a total_de_tentativas. E nós precisamos que ele também repita aquelas condições, para que o usuário tenha mais de uma tentativa e que em todas as tentativas, os novos números sejam devidamente comparados com o número secreto. Ou seja, essas condições devem ficar dentro do laço, porque elas irão variar de acordo com a resposta do usuário. Observe:

No caso do laço utilizado no código da aula:

total_de_tentativas = 3
rodada = 1

while (rodada <= total_de_tentativas):

    print("Tentativa", rodada, "de", total_de_tentativas)
    chute_str = input("Digite o seu número: ")
    print("Você digitou: ", chute_str)
    chute = int(chute_str)

    acertou = numero_secreto == chute
    maior = chute > numero_secreto
    menor = chute < numero_secreto

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

A nossa intenção é dar ao usuário 3 tentativas para tentar acertar o número secreto, certo?

Para que possamos fazer isso, criamos o laço while o qual vai permitir que o usuário tente acertar o valor 3 vezes. Por isso a linha chute_str = input("Digite o seu número: ") deve ficar dentro do laço, para solicitar que o usuário digite um número novo a cada tentativa.

Agora, vamos pensar, se a cada tentativa o usuário poderá digitar um novo valor, então isso quer dizer que a cada tentativa os valores das variáveis acertou, maior e menor serão diferentes, concorda? Uma vez que elas são resultados de comparações do número secreto com o chute do usuário.

Por exemplo, suponhamos que ele digite o número 30:

numero_secreto = 42

# usuário digitou o número 30

# acertou vai ser False, porque o chute (30) não foi igual a 42
acertou = chute == numero_secreto

# maior vai ser False, porque o chute (30) não é maior que 42
maior = chute > numero_secreto

# menor vai ser True, porque o chute (30) é menor que 42
menor = chute < numero_secreto

E essa mesma análise deve ser feita para cada número novo que o usuário digitar, ou seja, essa análise deve ser feita a cada nova tentativa, e por isso é necessário que essas condições fiquem dentro do laço while, porque elas irão permitir que o usuário tente mais de uma vez e que a cada nova tentativa ocorra essa comparação para ver se ele acertou o número.

Qualquer dúvida a gente vai se falando por aqui, tá bom?

Espero ter ajudado.

Bons estudos!