2
respostas

Falha na contagem dos últimos pontos perdidos [2]

Olá Igor (Apoio Educacional) e colegas.

Por gentileza, poderiam me ajudar ?

Continuo com a dúvida, em não incluir a pontuação da última tentativa, mesmo quando o usuário não acerta o número secreto.

Você havia comentado, referente da Aula 07, no último tópico, respondendo o colega:

... Entendi o que você explicou e está certo o seu raciocínio, porem na solução que o professor propôs até a aula 7, não é exibido a pontuação caso o jogador perca, então não tem problema o calculo ser feito nessa ordem...

Porém, entendi ao contrário, na Aula 07, Atividade 05, o instrutor destaca:

...Na mensagem de erro, acrescente um if para exibir, ao final do jogo, qual era o número secreto que não foi adivinhado e a pontuação final do usuário, mesmo que ele não tenha vencido a partida...

E nisso, no meu script, inclui o bloco das duas variáveis do cálculo da pontuação logo após o else e resolveu a questão.

E inclui também a condição que mostra a mensagem de pontos, tanto no laço do if(maior), quanto no laço do elif(menor).

Pois conforme a Aula 07, Atividade 05, se incluir essa condição apenas no laço do if(maior), caso a última tentativa caia no elif(menor), não teremos a mensagem de pontuação.

Ficando assim:

    else:
        pontos_perdidos = abs(numero_secreto - chute) 
        pontos = pontos - pontos_perdidos
        if (maior):
            print("Você errou! O seu chute foi maior do que o número secreto.")
            if (rodada == total_tentativas):
                print("O número secreto era {}. Você fez {}".format(numero_secreto, pontos))
        elif (menor):
            print("Você errou! O seu chute foi maior do que o número secreto.")
            if (rodada == total_tentativas):
                print("O número secreto era {}. Você fez {}".format(numero_secreto, pontos))

Pode ser uma questão de interpretação também. Mas poderiam me enviar um feedback referente a essa atualização do mesmo tópico, Por favor.

Agradecido, Abraço.

2 respostas

Olá Bruno.

Você está correto, na explicação do instrutor ele fala sobre imprimir a pontuação mesmo quando o jogador perder e explica como fazer isso.

Mas na implementação na parte VER OPINIÃO DO INSTRUTOR, não tem a implementação dessa parte, vamos fazer a correção.

E você está certo a implementação proposta do professor ficaria dessa maneira mesmo como ele disse:

O 'if (rodada == total_tentativas):' ficará igual tanto dentro da cláusula 'elif(menor)'.

else:
        pontos_perdidos = abs(numero_secreto - chute) 
        pontos = pontos - pontos_perdidos
        if (maior):
            print("Você errou! O seu chute foi maior do que o número secreto.")
            if (rodada == total_tentativas):
                print("O número secreto era {}. Você fez {}".format(numero_secreto, pontos))
        elif (menor):
            print("Você errou! O seu chute foi maior do que o número secreto.")
            if (rodada == total_tentativas):
                print("O número secreto era {}. Você fez {}".format(numero_secreto, pontos))

Poderíamos até refatorar esse código e colocar o if(rodada == total_tentativas para fora do ifs if(maior) e if(menor) já que é algo comum para os dois, ficando como abaixo:

else:
        pontos_perdidos = abs(numero_secreto - chute) 
        pontos = pontos - pontos_perdidos
        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 maior do que o número secreto.")
        if (rodada == total_tentativas):
                print("O número secreto era {}. Você fez {}".format(numero_secreto, pontos))

Mas na programação, exitem diversas soluções para o mesmo problema, por exemplo quando fiz esse projeto, implementei a solução abaixo:

        if acertou:
            print("Você acertou !")
            break
        else:
            pontosperdidos = abs(numero_secreto - chute)
            pontos = pontos - pontosperdidos

            if rodada == total_de_tentativas:
                print("O numero era o {}".format(numero_secreto))
            elif maior:
                print("Chute para baixo !")
            elif menor:
                print("Chute para cima  !")

        print('')
    print(f"Pontuação: {pontos}")

Obrigado pela sua observação e espero ter ajudado, mas qualquer duvida não hesite em perguntar.

Bons Estudos.

Olá Igor,

Entendi, muito bom. Esse segundo bloco do script que mandou, falando de colocar essa condição if, fora dos ifs, maior e menor, interessante, por ser algo em comum. Vejo como uma possibilidade melhor mesmo.

Por nada e eu que agradeço, Abraço. Estimo sucesso.