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

Contagem dos pontos perdidos - Pegadinha

Olá pessoal, Espero que estejam todos bem!

Tenho uma dúvida meio "besta". Quando da implementação dos pontos perdidos, sempre que erramos até a ultima tentativa, são descontados dos pontos apenas a soma dos pontos_perdidos até a penultima tentativa. Acredito que é devido aos blocos de if estarem antes do cálculo.

Aqui o resultado do teste em que erro todas as tentativas com o código da aula:

********************************
Bem vindo ao jogo de advinhação!
********************************
Qual o nível de dificuldade?
(1) Fácil (2) Médio (3) Difícil
Defina o nível: 3
Tentativa 1 de 5
Digite um numero entre 1 e 100: 99
Você digitou  99
Você errou! O seu chute foi maior do que o numero secreto
Tentativa 2 de 5
Digite um numero entre 1 e 100: 90
Você digitou  90
Você errou! O seu chute foi maior do que o numero secreto
Tentativa 3 de 5
Digite um numero entre 1 e 100: 80
Você digitou  80
Você errou! O seu chute foi maior do que o numero secreto
Tentativa 4 de 5
Digite um numero entre 1 e 100: 70
Você digitou  70
Você errou! O seu chute foi maior do que o numero secreto
Tentativa 5 de 5
Digite um numero entre 1 e 100: 65
Você digitou  65
Você errou! O seu chute foi maior do que o numero secreto
O número secreto era 20. Você fez 741 pontos.
Fim do jogo!

Process finished with exit code 0

A soma dos pontos perdidos dá 259, desconsiderando a ultima rodada deixando de somar 45 pontos perdidos. Incluindo a ultima rodada o resultado seria 696 pontos. Modifiquei o cálculo, incluindo-o logo após a declaração do else, ficando o código da seguinte forma:

import random
print("********************************")
print("Bem vindo ao jogo de advinhação!")
print("********************************")

numero_secreto = random.randrange(1,101)
total_de_tentativas = 0
pontos = 1000

print("Qual o nível de dificuldade?")
print("(1) Fácil (2) Médio (3) Difícil")
nivel = int(input("Defina o nível: "))

if(nivel == 1):
    total_de_tentativas = 20
elif(nivel == 2):
    total_de_tentativas = 10
else:
    total_de_tentativas = 5

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

    chute = int(input("Digite um numero entre 1 e 100: "))
    print("Você digitou ", chute)

    if(chute < 1 or chute > 100):
        print("Você deve digitar um numero entre 1 e 100!")
        continue

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

    if (acertou):
        print(f"Você acertou e fez {pontos} pontos.")
        break
    else:
        pontos_perdidos = abs(numero_secreto - chute)
        pontos = pontos - pontos_perdidos
        if(maior):
            print("Você errou!", "O seu chute foi maior do que o numero secreto")
            if(rodada == total_de_tentativas):
                print(f"O número secreto era {numero_secreto}. Você fez {pontos} pontos.")
        elif(menor):
            print("Você errou!", "O seu chute foi menor do que o numero secreto")
            if (rodada == total_de_tentativas):
                print(f"O número secreto era {numero_secreto}. Você fez {pontos} pontos.")
print("Fim do jogo!")

Estou usando o .format diferente, incluo o f antes das " " no print e coloco as variaveis dentro das chaves. Pode ser feito assim? Ou é má prática?

Desde já agradeço! Um bom ano novo a todos!!! :)

4 respostas

Sobre o uso do mais atual método de impressão de valores do console utilizando a função print(), em geral a "boa prática" é você seguir o padrão que a equipe onde você está trabalhando usa. Em situações gerais, o foco da "boa prática" é seu código ser entendível para todos. Nesse caso isolado e de estudos, dispensando a tal da "boa prática", é muito bom que você experimente diferentes formas de fazer a mesma coisa, já que se trata de um processo de estudo, quanto mais uso e experimentações de coisas diferentes, melhor :)

Em relação ao tópico em geral, você indagou um problema e uma possível solução, sobre isso, qual seria a dúvida?

Oi Thiago, boa tarde!

Tudo bem?

Na verdade pensei na solução e, testando, vi que funcionava incluindo o ultimo valor. Em seguida, avançando mais no curso vi que o professor trouxe a mesma solução. Eu fico inseguro porque algumas vezes, arranjei soluções que chegavam ao mesmo resultado, porém, demandavam mais escrita de código, o que não era bom.

boa. só lembrando que se vc coloca a linha de somatória da pontuação dentro de algum dos 'ifs' que já estao dentro do else, eles só vao interar caso aquela condição estiver sendo cumprida.

solução!

Estou usando o .format diferente, incluo o f antes das " " no print e coloco as variaveis dentro das chaves. Pode ser feito assim? Ou é má prática?

Eu já tinha aprendido assim, uso e acho que fica visivelmente melhor a leitura do código. :)