5
respostas

Implementação Pontos Finais _ errando

Ola Alura. Fiz uma Implementacao para Este jogo de Adivinhacao:

  • Caso o Jogador nao adivinhe o numero, ele poderá saber (aparecerá um print) qual era o numero que o random escolheu e tambem os seus pontos finais (tambem aparecerá pelo print);
  • Fiz essa implementacao mesmo o jogador errando em todas as tentativas, para ele saber seus pontos;
  • Notei que o codigo original feito pelo Nico Steppat nao calcula os pontos finais da ultima rodada/tentativa corretamente, pois a variavel "pontos = pontos - pontos_perdidos" fica localizada em um local onde os pontos da ultima rodada é ignorada.

De todas as formas, envio meu codigo para sua analise, e obrigado pela atencao.

import random

def jogar_adivinhacao():
# identar toda a funcao embaixo

      print("*******************")
      print("Bem Vindos Ao Jogo da Adivinhacao!")
      print("*******************")

      # variaveis do jogo
      numero_secreto = random.randrange(1,101)
      total_de_tentativas = 0
      pontos = 1000

      print("Qual nivel de dificuldade?")
      print("(1) Facil  (2) Medio  (3) Dificil")

      nivel = int(input("Defina o nivel: "))
      if (nivel==1):
        total_de_tentativas = 20
      elif (nivel==2):
        total_de_tentativas = 10
      else:
        total_de_tentativas =5
      print(numero_secreto)

      for rodada in range (1, total_de_tentativas + 1):
          print("Tentativa {} de {}".format(rodada, total_de_tentativas))

          chute_str = input("Digite o número de 1 a 100: ")
          print("Você digitou " , chute_str)
          chute = int(chute_str)

          if (chute<1 or chute>100):
              print("Voce Deve Digitar um numero entre 1 a 100\n")
              continue

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

          if(acertou):
              print("Parabéns! Você acertou e fez {}!\n". format(pontos))

          else:
              if(maior):
                  print("O seu chute foi maior do que o número secreto! \n")


              elif(menor):
                  print("O seu chute foi menor do que o número secreto! \n")


              pontos_perdidos = abs(numero_secreto - chute)
              pontos = pontos - pontos_perdidos

          if (rodada == total_de_tentativas):
              print("O número secreto era {}. Você fez {}".format(numero_secreto, pontos))

      print("*******************")
      print("Fim do jogo!")
      print("*******************")

if(__name__ == "__main__"):
   jogar_adivinhacao()
5 respostas

Oi Ronaldo tudo bem?

Deu algum erro na lógica. Após eu acertar na sexta tentativa ele pediu pra eu tentar de novo na sétima tentativa. Dá uma olhada.

Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
*******************
Bem Vindos Ao Jogo da Adivinhacao!
*******************
Qual nivel de dificuldade?
(1) Facil  (2) Medio  (3) Dificil
Defina o nivel: 1
62
Tentativa 1 de 20
Digite o número de 1 a 100: 50
Você digitou  50
O seu chute foi menor do que o número secreto!

Tentativa 2 de 20
Digite o número de 1 a 100: 75
Você digitou  75
O seu chute foi maior do que o número secreto!

Tentativa 3 de 20
Digite o número de 1 a 100: 60
Você digitou  60
O seu chute foi menor do que o número secreto!

Tentativa 4 de 20
Digite o número de 1 a 100: 70
Você digitou  70
O seu chute foi maior do que o número secreto!

Tentativa 5 de 20
Digite o número de 1 a 100: 65
Você digitou  65
O seu chute foi maior do que o número secreto!

Tentativa 6 de 20
Digite o número de 1 a 100: 62
Você digitou  62
Parabéns! Você acertou e fez 962!

Tentativa 7 de 20
Digite o número de 1 a 100:

Dá uma procurada onde tá o erro se não te ajudo a procurar.

Me Desculpe. No meu algoritmo rodou certinho. Na hora de enviar o algoritmo para voces eu apaguei o Break do codigo. Desculpe. Agora fiz o copy cola de novo. Caso tenha dado erro, eh so colocar o Break apos o Terciero uso do If.

import random

def jogar_adivinhacao():
# identar toda a funcao embaixo

      print("*******************")
      print("Bem Vindos Ao Jogo da Adivinhacao!")
      print("*******************")



      # variaveis do jogo
      numero_secreto = random.randrange(1,101)
      total_de_tentativas = 0
      pontos = 1000



      print("Qual nivel de dificuldade?")
      print("(1) Facil  (2) Medio  (3) Dificil")



      nivel = int(input("Defina o nivel: "))
      if (nivel==1):
        total_de_tentativas = 20
      elif (nivel==2):
        total_de_tentativas = 10
      else:
        total_de_tentativas =5
      print(numero_secreto)



      for rodada in range (1, total_de_tentativas + 1):
          print("Tentativa {} de {}".format(rodada, total_de_tentativas))



          chute_str = input("Digite o número de 1 a 100: ")
          print("Você digitou " , chute_str)
          chute = int(chute_str)

          if (chute<1 or chute>100):
              print("Voce Deve Digitar um numero entre 1 a 100\n")
              continue

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

          if(acertou):
              print("Parabéns! Você acertou e fez {}!\n". format(pontos))     
              break

          else:
              if(maior):
                  print("O seu chute foi maior do que o número secreto! \n")

              elif(menor):
                  print("O seu chute foi menor do que o número secreto! \n")


              pontos_perdidos = abs(numero_secreto - chute)
              pontos = pontos - pontos_perdidos

          if (rodada == total_de_tentativas):
              print("O número secreto era {}. Você fez {}".format(numero_secreto, pontos))

      print("*******************")
      print("Fim do jogo!")
      print("*******************")

if(__name__ == "__main__"):
   jogar_adivinhacao()

Olá Ronaldo! Como vai?

Vamos por partes:

Sobre o Seu Código

A ideia é bem por ai! A lógica que você criou faz sentido, só tenho um ponto de atenção. Tem um problema com o lugar em que está o seu :

if (rodada == total_de_tentativas):
              print("O número secreto era {}. Você fez {}".format(numero_secreto, pontos))

Se a pessoa acertar apenas na 5ª rodada, duas mensagens vão aparecer para ela:

"Parabéns você acertou e fez x pontos"

" O numero secreto era y e você fez x pontos"

Para evitar essa duplicação, recomendo que o seu if fique dentro do "else", dessa maneira:

          if(acertou):
              print("Parabéns! Você acertou e fez {}!\n". format(pontos))

          else:
              if(maior):
                  print("O seu chute foi maior do que o número secreto! \n")


              elif(menor):
                  print("O seu chute foi menor do que o número secreto! \n")


              pontos_perdidos = abs(numero_secreto - chute)
              pontos = pontos - pontos_perdidos

              if (rodada == total_de_tentativas):
                  print("O número secreto era {}. Você fez {}".format(numero_secreto, pontos))

Perceba que agora o if (rodada == total_de_tentivas) está identado

Dessa maneira essa mensagem que você criou aparecerá apenas se a pessoa errar 5 vezes.

Também, depois que o seu processo de validação terminar, não esqueça de tirar:

print(numero_secreto)

Para que o número secreto não fique aparecendo quando alguem for jogar de verdade =)

Sobre o Código do Nico

Acredito que tenha sido o intuito do professor de não contabilizar a rodada de acerto. Se pensarmos num jogo, não faz sentido a pessoa ser penalizada por que acertou, correto?

É isso que ocorre, no lugar em que a contagem de pontos é feita, a pessoa só perde pontos a cada vez que erra.

Ficou alguma dúvida? Por favor me avise se a resposta te atendeu.

Bons Estudos!

Muito Obrigado. O código não contabiliza todos os pontos do participante, pois ignora a contagem de pontos da última rodada. É isso que ocorre. Nao é ser penalizada porque acertou; e sim saber corretamente mesmo se a pessoa errou tudo, quais são os pontos finais quando o jogo terminou, mesmo errando tudo. É apenas um adendo. No mais, obrigado. Parabéns pelo trabalho de todos.

Disponha e bons estudos!!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software