Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Falha na contagem de pontos

Após errar propositalmente o jogo, percebi que a contagem de pontos está errada. Sempre adicionado 1 ao número verdadeiro de pontos. Segue o código:

import random 

print("====================================")
print("Bem vindo ao desafio da adivinhação!")
print("====================================")

total_de_tentativas = 0
rodada = 1
numero_secreto = random.randrange(1, 101) 
print("Escolha o nível de dificuldade.")
print("(1)-Fácil (2)-Médio (3)-Difícil")
nivel = int(input("Escolha o nível: "))
pontos = 1000
print(numero_secreto)

if (nivel == 1):
    total_de_tentativas = 12
elif(nivel == 2):
    total_de_tentativas = 8
else:
    total_de_tentativas = 5

for rodada in range(rodada, total_de_tentativas + 1):
    print("Tentativa {} de {}".format(rodada, total_de_tentativas))
    chute_str = input("Tente adivinhar o número secreto que está entre 1 e 100:")
    print("Você digitou o número", chute_str, ".")
    chute = int(chute_str)
    acertou     = (chute == numero_secreto)
    chute_menor = (chute < numero_secreto)
    chute_maior = (chute > numero_secreto)
    if(acertou):
        print("Parabéns! Você acertou e fez {} pontos!".format(pontos))
        break
    if(chute < 1 or chute > 100):
        print("Você precisa digitar um número entre 1 e 100.")
        continue
    else:
        if(chute_menor):
            print("Você errou! O número que você digitou é menor que o número secreto.")
        elif(chute_maior):
            print("Você errou! O número que você digitou é maior que o número secreto.")
            if (total_de_tentativas == rodada):
                print("Você perdeu. O número secreto é {}. Você fez {} pontos".format(numero_secreto, pontos))
        pontos_perdidos = abs(numero_secreto - chute) #função abs é para deixar o número positvo
        pontos = pontos - pontos_perdidos



print("Fim do jogo.")
4 respostas

Gostaria de convidá-los a executar o código postado acima... Espero que possamos entender o porquê do fenômeno, caso aconteça a mesma falha na contagem de pontos com vcs. Muitos obrigados.

Oi Rodrigo! Como vai?

Testei o seu código e não tive problemas com a contagem de pontos!

O número secreto era 64, testei chutar 62 e depois 63.

64-62=2

64-63=1

(2+1) = 3 = Pontos Perdidos

Pontos = 1000-3 = 997

Testei outras vezes, e também pareceu tudo certo.

Como você está fazendo essa conta da pontuação?

solução!

Olá Rodrigo,

Percebi que no código tem um problema na identação na parte do if (total_de_tentativas == rodada).

Esse if (total_de_tentativas == rodada) só será executado caso o chute tenha sido maior que o número secreto, pois está dentro do elif(chute_maior).

Acredito que o correto seja assim (após o cálculo da pontuação):

else:
    if(chute_menor):
        print("Você errou! O número que você digitou é menor que o número secreto.")
    elif(chute_maior):
        print("Você errou! O número que você digitou é maior que o número secreto.")

    pontos_perdidos = abs(numero_secreto - chute) #função abs é para deixar o número positvo
    pontos = pontos - pontos_perdidos

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

Eu vi que já está assim no próprio texto da atividade, vou conferir se realmente está correto esse código e vou corrigir a atividade.

Corrigindo isso deve resolver o problema na pontuação. Como a Marina já testou, a pontuação é calculada corretamente caso a pessoa acerte o número secreto depois de algumas tentativas. Apenas no caso de errar todas as tentativas e a última tentativa ser maior que o número secreto é que a pontuação errada vai aparecer.

Obrigado, Marina e Lucas pela ajuda. Marina, a pontuação segue o mesmo exemplo das aulas (a diferença entre os chutes e o número secreto). Eis um ctrl+c e ctrl+v de uma das partidas já que ão consigo postar um print da tela aqui:

====================================

Bem vindo ao desafio da adivinhação!

Escolha o nível de dificuldade. (1)-Fácil (2)-Médio (3)-Difícil Escolha o nível: 3 67 Tentativa 1 de 5 Tente adivinhar o número secreto que está entre 1 e 100:66 Você digitou o número 66 . Você errou! O número que você digitou é menor que o número secreto. Fim do jogo. Tentativa 2 de 5 Tente adivinhar o número secreto que está entre 1 e 100:66 Você digitou o número 66 . Você errou! O número que você digitou é menor que o número secreto. Fim do jogo. Tentativa 3 de 5 Tente adivinhar o número secreto que está entre 1 e 100:66 Você digitou o número 66 . Você errou! O número que você digitou é menor que o número secreto. Fim do jogo. Tentativa 4 de 5 Tente adivinhar o número secreto que está entre 1 e 100:66 Você digitou o número 66 . Você errou! O número que você digitou é menor que o número secreto. Fim do jogo. Tentativa 5 de 5 Tente adivinhar o número secreto que está entre 1 e 100:66 Você digitou o número 66 . Você errou! O número que você digitou é menor que o número secreto. Você perdeu. O número secreto é 67. Você fez 996 pontos Fim do jogo.

Process finished with exit code 0

Lucas, a contagem da pontuação acontecia independente de todos os números chutados serem maiores ou menores. Copiei o seu código e fiz o teste. Funcionou numa boa! Obrigado novamente.

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