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

Cálculo da pontuação

O jogo faz a operação de subtração de pontos apenas quando o chute é menor que o número secreto. Segue trecho do código do gabarito:

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

        if(acertou):
            print("Você acertou e fez {} pontos!".format(pontos))
            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.")
            pontos_perdidos = abs(numero_secreto - chute)
            pontos = pontos - pontos_perdidos

Solucionei copiando o cálculo para a possibilidade do chute ser maior que o número secreto. Segue trecho do meu código:

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


        if (acertou):
            print("Você acertou e fez {} pontos".format(pontos))
            break
        else:
            if(maior):
                print("Você errou! Seu chute foi maior que o número secreto")
                pontos_perdidos = abs(numero_secreto - chute)
                pontos = pontos - pontos_perdidos
            elif(menor):
                print("Você errou! Seu chute foi menor que o número secreto")
                pontos_perdidos = abs(numero_secreto - chute)
                pontos = pontos - pontos_perdidos

Olhando assim acredito que caiba uma refatoração desse cálculo para deixar o código mais elegante. Alguém se habilita a me ajudar?

3 respostas
solução!

Acho que você pode remover a identação na parte dos pontos. Do jeito que estava ele faria o cálculo somente no "elif", ou seja, somente se for menor ele faria a conta. Removendo a identação ele fará sempre.Segue o exemplo do código.

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

        if(acertou):
            print("Você acertou e fez {} pontos!".format(pontos))
            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.")
        pontos_perdidos = abs(numero_secreto - chute)
        pontos = pontos - pontos_perdidos

Ou você pode fazer para organizar melhor, deixando junto. Mas a forma que você fez, você está repetindo um código desnecessário, pois se encaixa o fato de você ter indentado somente para o menor.

       acertou = chute == num_secreto
        maior = chute > num_secreto
        menor = chute < num_secreto
        quantidade_tentativa = total_de_tentativas - 1
        pontos_perdidos = abs(num_secreto - chute)
        pontos = pontos - pontos_perdidos

        if (acertou):
            print("Você acertou e fez {} pontos com {} tentativas de {}!".format(pontos, quantidade_tentativa, total_de_tentativas))
            break
        else:
            if(maior):
                print("Você Errou! Seu chute foi maior que o numero secreto")
                if (rodada == total_de_tentativas):
                    print("O número secreto era {}. Você fez {} pontos".format(num_secreto, abs(pontos)))
            elif(menor):
                print("Você Errou! Seu chute foi menor que o numero secreto")
                if (rodada == total_de_tentativas):
                    print("O número secreto era {}. Você fez {} pontos".format(num_secreto, abs(pontos)))

Heitor, você tem razão. Não tinha me ligado na indentação . Obrigado pela ajuda.

Kelvis, Sua solução foi bem interessante, mas não consegui fazer dar certo aqui quando testei. De qualquer forma, obrigado pela contribuição .