5
respostas

[Dúvida] Função "While" - Jogo de Adivinhação

Boa noite! Sobre o código abaixo: Segundo a aula, o programa deveria rodar as condições 3 vezes e em cada uma delas, imprimir as mensagens definidas nas funções "if", "else" e "elif". Porém, o programa continua rodando um número ilimitado de tentativas e não finaliza; além disso, não imprime as mensagens e não finaliza o jogo quando acerto o número secreto. Alguém pode me ajudar? Estou há quase 8h tentatndo resolver isso!

from IPython.core.debugger import strip_indentation
print ("*********************************")
print ("Bem vindo ao jogo de adivinhação!")
print ("*********************************")

numero_secreto = 25
total_de_tentativas = 3

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

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

if (acertou):
  print("Você acertou!")
else:
  if(maior):
    print("Seu chute foi maior do que o correto")
  elif(menor):
    print("Seu chute foi menor do que o correto")

total_de_tentativas = total_de_tentativas - 1

print("Fim de Jogo!")

O resultado do código acima fica assim:

*********************************
Bem vindo ao jogo de adivinhação!
*********************************
Tentativa: 3
Digite o seu número: 30
Você digitou  30
Tentativa: 3
Digite o seu número: 20
Você digitou  20
Tentativa: 3
Digite o seu número: 25
Você digitou  25
Tentativa: 3
Digite o seu número: 10
Você digitou  10
Tentativa: 3
Digite o seu número:
5 respostas

Oi, Lucas. O problema está na indentação

Adicionei um "break" no "acertou" para sair do loop quando acertar


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

numero_secreto = 25
total_de_tentativas = 3

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

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

  if (acertou):
    print("Você acertou!")
    break
  else:
    if(maior):
      print("Seu chute foi maior do que o correto")
    elif(menor):
      print("Seu chute foi menor do que o correto")

  total_de_tentativas = total_de_tentativas - 1

print("Fim de Jogo!")

Fala Luis, boa noite!

Dessa forma deu certinho e o programa rodou do jeito que deveria, mas eu confesso que não consegui identificar onde estava o problema na indentação, porque eu fiz exatamente como o instrutor explicou no vídeo (e a função "break" não foi apresentada na aula, mas é muito legal saber desse detalhe). Se você puder me ajudar a entender melhor sobre a indentação nesse caso, me ajuda muito! Muito obrigado pela dica! =D

A indentação (recuo, do inglês indentation) é um processo que facilita a leitura do código

No Python, ela é obrigatória. Enquanto a maioria das linguagens utilizam as chaves "{ }", o Python utiliza a indentação para delimitares os blocos de instrução

Você padrão usar 2 ou 4 espaços, também o "tab", mas não misture eles. Escolha apenas uma forma no seu código

Para testar sua formatação https://codebeautify.org/python-formatter-beautifier

Show!! Muito obrigado Luis!!

Na verdade o prefessor pulou essa parte e não explicou. Ele acabou esquecendo de considerar o cenário onde você acerta o número antes da última tentativa.

Aqui no meu código eu havia colocado pra ajustar o valor da roda quando acertasse também.

if(acertou):
    print("Você acertou!")
    rodada = total_de_tentativas + 1

Não sabia dessa do break. Valeu, Luis!