1
resposta

While "e" For

Boa tarde, quando utilizo o "For" no jogo de Adivinhação, ele traz o resultado certo, de forma certa. Diferente do "While", quando utilizo o código a resposta vem diferente. No While vem a mais com a resposta "Você errou! O seu chute foi menor do que o número secreto.", sendo que a lógica era para ser igual o "For".

Segue os códigos e respostas abaixo:

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

numero_secreto = 42 total_de_tentativas = 3

for rodada in range(1, total_de_tentativas + 1): print("Tentativa {} de {}".format(rodada, total_de_tentativas)) chute_str = input("Digite um número entre 1 e 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 = chute == numero_secreto
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 do que o número secreto.")
    elif(menor):
        print("Você errou! O seu chute foi menor do que o número secreto.")

print("Fim do jogo.")

Tentativa 1 de 3 Digite um número entre 1 e 100: -1 Você digitou -1 Você deve digitar um número entre 1 e 100! Tentativa 2 de 3 Digite um número entre 1 e 100:


print("*") print("Bem vindo no 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 o seu numero: ") 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!")


acertou = chute == numero_secreto
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 do que o número secreto.")
    elif(menor):
        print("Você errou! O seu chute foi menor do que o número secreto.")

rodada = rodada + 1

print("Fim do jogo.")

Tentativa 1 de 3 Digite o seu numero: -1 Você digitou -1 Você deve digitar um número entre 1 e 100! Você errou! O seu chute foi menor do que o número secreto. Tentativa 2 de 3 Digite o seu numero:

1 resposta

Bom dia Marcelo, tudo bem? Vim dar uma verificada no fórum e me deparei com o seu post, sei que faz algum tempo e acredito que você possa já ter achado a solução, porém, existe a possibilidade que você esteja desde o dia que postou isso sem dormir procurando uma resposta.

Com a funcionalidade for a iteração funciona como deveria, eu erro, vou pra próxima rodada, eu coloco um número inválido, o programa me posiciona que era inválido e vou para a próxima rodada, tudo certo por aqui.

O while por sua vez, eu preciso fazer a modificação "manual" na variável que estou iterando, como acrescentando 1 rodada a variável rodada para que o jogo acabe em algum momento caso eu não acerte o número e o break seja ativado.

Certo, mas como posso corrigir o problema no meu código?

Comparando as duas imagens acima, no código com o for você utilizou o continue, com o while não, sendo assim, mesmo que no caso do while eu insira o número inválido, o programa todo continua sendo percorrido, arrumando isso você vai conseguir fazer com que seu programa volte sempre para o início quando for digitado algum número inválido, show, só isso? Claro que não, eu preciso que toda vez que um número inválido seja digitado a contagem de rodadas aumente também, então você vai precisar colocar um rodada = rodada + 1 ali também.

rodada = 1
while( rodada <= total_de_rodadas):
    print("rodada {} de {}".format(rodada, total_de_rodadas))

    chute_str = input("Digite um numero: ")
    print("Voce digitou: ", chute_str)
    chute = int(chute_str)

    if(chute < 1 or chute > 100):
        print("VOCE DEVE DIGITAR UM NUMERO ENTRE 1 E 100")
        rodada += 1
        continue

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

    if(acertou):
        print("VOCE ACERTOU! e fez {} pontos".format(pontos))
        break
    else:
        if(maior):
            print("VOCE ERROU, O SEU CHUTE FOI MAIOR QUE O NUMERO SECRETO :(")
        elif(menor):
            print("VOCE ERROU, O SEU CHUTE FOI MENOR QUE O NUMERO SECRETO :(")
        pontos_perdidos = abs(numero_secreto - chute)
        pontos = pontos - pontos_perdidos
        if(rodada == total_de_rodadas):
            print("VOCE NÃO ACERTOU O NUMERO SECRETO, ERA {}, E VOCE TERMINOU O JOGO COM {} PONTOS!". format(numero_secreto,pontos))
        rodada += 1


print("FIM DE JOGO!")