3
respostas

Erro no final do código

Pessoal, boa noite. Tudo bem com vocês? No andamento do curso fiz um protótipo do "jogo de adivinhação", depois de muito pensar, acabou dando praticamente tudo certo.

Notei apenas um comportamento estranho nisso tudo... se eu acertar o número aleatório gerado na minha última tentativa, não está imprimindo o "Parabéns, você acertou", como eu tinha programado. Alguém consegue me dar uma luz nisso?

'''
declarar primeiras variáveis de controle e a função de contagem de tentativas
num_min = numero minimo no intervalo de escolhas
cont_tent = auxiliar na contagem de tentativas que será imprimida na tela
nivel = será trocada pelo input do usuário
'''
import random

num_min = 1
cont_tent = 1
nivel = 0

def contador_tentativas():

    print("Tentativa: {} de {}". format(cont_tent, tent_max))

# Inicialização do jogo com a escolha do nível desejado. Com base na escolha, é gerado o número aleatório.

while nivel < 1 or nivel > 3:
    print("Escolha o nível desejado:")
    print("(1)Fácil  (2)Médio  (3)Difícil")
    nivel = int(input("Escolha o nível desejado:"))

    if nivel < 1 or nivel > 3:
        print("O nível escolhido deve estar entre 1 e 3, tente novamente.")

    elif nivel == 1:
        num_max = 10
        tent_max = 3

    elif nivel == 2:
        num_max = 50
        tent_max = 4

    elif nivel == 3:
        num_max = 100
        tent_max = 5

numero_aleatorio = int(random.randrange(num_min, num_max + 1, 1))

# Fim do bloco de escolha de nível, inicio do jogo com o contador e aguardando o input do usuário

contador_tentativas()
numero_escolhido = int(input("Digite um número entre {} e {}:".format(num_min, num_max)))

for cont_tent in range(1, tent_max):
    if numero_escolhido < num_min or numero_escolhido > num_max:
        print("O número deve estar entre {} e {}, tente novamente.".format(num_min, num_max))
        cont_tent = (cont_tent + 1)
        contador_tentativas()
        numero_escolhido = int(input("Digite um número entre {} e {}:".format(num_min, num_max)))
    else:
        if numero_escolhido == numero_aleatorio:
            print("Parabéns, você acertou!")
            break
        elif numero_escolhido < numero_aleatorio:
            print("Seu chute foi MENOR do que o sorteado.")
            cont_tent = (cont_tent + 1)
            contador_tentativas()
            numero_escolhido = int(input("Digite um número entre {} e {}:".format(num_min, num_max)))
        elif numero_escolhido > numero_aleatorio:
            print("Seu chute foi MAIOR do que o sorteado.")
            cont_tent = (cont_tent + 1)
            contador_tentativas()
            numero_escolhido = int(input("Digite um número entre {} e {}:".format(num_min, num_max)))

if cont_tent >= tent_max:
    print("Suas tentativas acabaram. Reinicie o programa e tente novamente!")

print("\nCtrl: escolhido = {} sorteado = {}".format(numero_escolhido, numero_aleatorio))

Só informando também que se eu acerto antes da última tentativa, tudo dá certo, como previsto. Esse comportamento acontece só na última.

Valeu!

3 respostas

Oi Tiago, blz?

O provável erro está no seu for, no range de 1 ao tent_max. Lembrando que o range é igual o slice, Ou seja, desse modo está indo de 1 até (tent_max - 1). O correto é começar o range no 0, ou então somar um a mais no tent_max.

E ai Erick, tranquilo?

Imaginei que seria isso, fiz o ajuste aqui. Mas agora o contador de tentativas vai até "Tentativa 4 de 3"

Vou bater cabeça aqui mais um pouco também! hehe

Valeu!

Ah sim.. Isso é por que começa no 1.. Tenta começar do 0.. E se precisar imprimir na tela você põe +1.

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