2
respostas

Por algum motivo, não está aparecendo o número secreto e a pontuação final

No meu caso só aperece o o resultado dos meus códigos implementado. Mas os if's do professor não aperece.

Código completo

import random

print("*********************************")
print("Bem vindo ao jogo de Adivinhaçã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("Define o nível: "))

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

print(numero_secreto)


#  variável/em/série/n°inicial, /n°Final, /step, => intervalo entre os elementos
for rodada in range(1, total_de_tentativas + 1):
    print("Tentativa {} de {}".format(rodada, total_de_tentativas))
    #print(f"Tentativa {rodada} de {total_de_tentativas}") # f-strings ou formatted string literals => novo recurso a partir do python 3.6
    chute_str = input("Digite o seu número: ")
    print("Você digitou " , chute_str)
    chute = int(chute_str)

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

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

    # desconta e atualiza os pontos atual
    desconta_pontos = pontos_perdidos = abs(numero_secreto - chute)  # Para dar sinal positivo sempre. Ex: se der menos, transforma em mais
    atualiza_pontos = pontos = pontos - pontos_perdidos


    if(acertou):
        print("Parabéns! 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! Seu placar agora é de {} pontos!".format(pontos))
            if(rodada == total_de_tentativas):
                print("O número secreto era {}. Você fez {}".format(numero_secreto, pontos))
            desconta_pontos
            atualiza_pontos
        elif(menor):
            print("Você errou! O seu chute foi menor do que o número secreto! Seu placar agora é de {} pontos!".format(pontos))
            if(rodada == total_de_tentativas):
                print("O número secreto era {}. Você fez {}".format(numero_secreto, pontos))
            desconta_pontos
            atualiza_pontos

    # rodada = rodada + 1

print("Fim do jogo")

# Abaixo:

# random() => função que gera números aleatórios (precisa ser importado --> import random) Obs: random é uma função que está em um módulo separado, por importar
# round() => função que arredonda o número. Exemplo: 18.895629671768187 para 19 (arredonda pelo mais aproximado)
# random.random() => gera números aleatórios de 0.0 a 1.0
# random.randrange(10) => de 0 a 10
# random.randrange(0, 101) => 0 a 100 inclusivo
# seed => é as entradas dadas a cada chamada da função random e cada seed é utilizado como entrada por padrão os milisegundos(hora). Ou seja, cada milisegundos representa uma entrada e por isso acaba gerando números aleatórios. Lembrando que se repetir a entrada, repete o mesmo número a cada chamada da função random ou a cada sorteio
# pseudo-random => o python recebe esse nome pelo motivo de saber gerar número aleatórios de verdade
# Importante! "funções built-in" => As funções built-in podem ser chamadas a qualquer momento, em todos os lugares. Exemplo de funções são type(..), abs(), input(..) ou int.

##############################################

# Abaixo: funções random e round para fins didáticos

#import random

#numero_random = random.random() * 100
#print(numero_random)

#numero_round = round(numero_random)
#print(numero_round)

##############################################
2 respostas

Boa noite amigo,

Acredito que o problema esteja em dois pontos do seu código:

# desconta e atualiza os pontos atual
    desconta_pontos = pontos_perdidos = abs(numero_secreto - chute)  # Para dar sinal positivo sempre. Ex: se der menos, transforma em mais
    atualiza_pontos = pontos = pontos - pontos_perdidos

Observe que você faz duas atribuições (desconta_pontos = pontos_perdidos = abs(...

O correto seria:

    pontos_perdidos = abs(numero_secreto - chute)  # Para dar sinal positivo sempre. Ex: se der menos, transforma em mais
    pontos = pontos - pontos_perdidos

Feito isto, o segundo ponto é que você não está dando o print na pontuação do usuário. Estas linhas poderiam ser removidas:

            desconta_pontos
            atualiza_pontos

Enquanto que ainda falta o print, que ficaria na linha do # rodada = rodada + 1:

print("Você fez {} pontos.".format(pontos))

Olá! Eu me enganei, pois estava aperecendo no console sim. Foi falta de atenção minha. Esse print no qual tu falaste, só aperecia no final do jogo e eu não notei isso.

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

ou

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

Pois, agora sobre aquelas variáveis desconta_pontos e atualiza_pontos Eu só substitui elas no lugar dos códigos pontos_perdidos = abs(numero_secreto - chute) e pontos = pontos - pontos_perdidos Pois testei e elas funcionam da mesma forma. Só fiz assim para fins de um melhor entendimento.