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

Qual o problema do meu código?

Boa tarde! Meu número secreto é o 50. Meu algorítimo só afirma que, qualquer número digitado pelo usuário inclusive o 50 , é um número menor que o número secreto. O que eu fiz de errado?

# APRESENTAÇÃO
print('****************************************************************************')
print('Bem-vindo ao jogo de Adivinhacão!')
print("Neste programa você deve adivinhar qual foi o número que nós escolhemos")
print('****************************************************************************')
print()

# COMEÇO DO PROGRAMA
tentativas = int((input("Digite quantas vezes você quer tentar e tecle ENTER: ")))
num_secreto = 50
chute_usuario = 0
print()

# COMEÇO DO LOOP OU LAÇO
for rodadas in range(1, tentativas + 1):  # Essa função serve para manter o laço(variável rodadas, incremntada
                                          # automaticamente) dentro de um limite(range). O limite, neste caso,
                                          # vai do 1 INCLUSIVE até o último número indicado pelo usuário EXCLUSIVE.
                                          #  Daí a necessidade de 'tentativas + 1.

    # CRIAÇÃO DE VARIÁVES PARA OS TESTES DE CHUTES DO USUÁRIO
    chute_menor = chute_usuario < num_secreto  # Criação das variáveis para as condições if. Essas variáveis devem ser criadas
    chute_maior = chute_usuario > num_secreto  # dentro do laço do "for" para que sejam sempre atualizadas pelo próximo
    chute_correto = chute_usuario == num_secreto  # input do "chete_usuario".
    chute_diferente = chute_usuario != num_secreto

    # GARNTINDO A PRIMEIRA INTERAÇÃO COM O USUÁRIO DENTRO DO LOOP
    if (rodadas == 1):
        print("Ok! Esta é a tentativa", rodadas, "de", tentativas)
        print("Qual o número que você acha que nós escolhemos?")
        chute_usuario = int(input("Digite um número e teche ENTER: "))# Os dados numéricos coletados do usuário, por padrão
                                                                      # Python,são sempre uma STR. Daí a necessidade de se
                                                                      # converter essa coleta para INT. Isso evita erros.
    print()

    # GARNTINDO AS DEMAIS INTERAÇÕES COM O USUÁRIO DENTRO DO LOOP
    if (rodadas > 1):
        print("Esta é a tentativa {} de {}".format(rodadas, tentativas))  # String interpolation: É uma função, como
                                                                          # forma alternativa, para intercalar o conteúdo
                                                                          # de uma variável na frase a ser impressa.
        chute_usuario = int(input("Por favor, digite outro número e tecle ENTER: "))
    print()

    # BLOCO DE TESTES DOS CHUTES DO USUÁRIO
    if (chute_diferente):
        if (chute_usuario < 0):
            print("Este jogo não adimite números negativos")
            continue  # O comando continue força o retorno ao início do laço.
        print(chute_usuario, "não é o nosso número secreto!", end="\n")# END permite a inserção de uma STR antes da
                                                                       # barra e o N depois da barra quebra a linha.
        input("Tecle ENTER para te darmos uma dica")
        print()

        if (chute_menor):
            print(chute_usuario, "é menor que o nosso número")
            print()
        elif (chute_maior):
            print(chute_usuario, "é maior que o nosso número")
            print()
    elif(chute_correto):
        break          # O comando break força a parada do loop.

if(chute_correto):
    print()
    print("***********************")
    print("PARABÉNS! Você acertou!")
    print("***********************")
    input("Tecle ENTER para sair")
else:
    print("Lamento! Mas, você não conseguiu!")
    print("************GAME OVER*************")
    input("Tecle ENTER para sair")
insira seu código aqui
2 respostas
solução!

Opa Diego, tudo bom?

Acho que sei porque seu código não está funcionando.

Você está declarando as variáveis chute_menor, chute_maior, chute_correto e chute_diferente antes mesmo que o usuário tenha feito o input da variável chute_usuario, ou seja, o seu programa já decide se a variável é menor, maior, correta ou diferente antes do usuário informar o chute.

Exemplo:

O seu programa inicia com chute_usuario = 0, então quando você entra no "for" temos:

chute_menor =  0 < 50 = VERDADEIRO
chute_maior = 0 > 50 = FALSO
chute_correto = 0 == 50 = FALSO
chute_diferente = 0 != 50 = VERDADEIRO

Então a partir daí você pede para o usuário digitar um número, mas perceba que tudo já foi decidio acima ..

Vamos supor que o usuário digitou 60. Temos que agora chute_usuario = 60. Mas chute_menor, chute_maior, chute_correto e chute_diferente não são alterados. Sendo assim seu programa vai falar que o chute foi MENOR e vai retornar ao "for".

Quando retornar vamos ter:

chute_menor =  60 < 50 = FALSO
chute_maior = 60> 50= VERDADEIRO
chute_correto = 60 == 50 = FALSO
chute_diferente = 60 != 50= VERDADEIRO

... daí se a pessoa digitar 1 na próxima tentativa o programa vai falar que o valor digitado foi maior, porque já fez as comparações com o valor anterior (60) .. e assim por diante.

Se vc digitar 50, você vai precisar passar pelo "for" mais uma vez para ele falar que o valor está correto.

A solução para isso seria pedir para o usuário colocar o chute e, somente depois, inserir:

    chute_menor = chute_usuario < num_secreto  
    chute_maior = chute_usuario > num_secreto  
    chute_correto = chute_usuario == num_secreto 
    chute_diferente = chute_usuario != num_secreto

Outra dica para você investigar o que estava acontecendo seria colocar um display para ver o que estava dentro de cada variável:

print(chute_menor)
print(chute_maior)
print(chute_correto)
print(chute_diferente)

Espero ter ajudado!

Diego, tudo certo?

O que o Felipe comentou é exatamente o problema que está no seu código, você esta efetuando as comparações de chute com o número secreto antes do usuários informar o valor de chute. Então você deveria solicitar o valor de chute antes de compará-lo com o número secreto. Abaixo segue uma forma de você fazer isto:

# APRESENTAÇÃO
print('****************************************************************************')
print('Bem-vindo ao jogo de Adivinhacão!')
print("Neste programa você deve adivinhar qual foi o número que nós escolhemos")
print('****************************************************************************')
print()

# COMEÇO DO PROGRAMA
tentativas = int((input("Digite quantas vezes você quer tentar e tecle ENTER: ")))
num_secreto = 50
chute_usuario = 0
print()

print("Ok! Esta é a tentativa 1 de", tentativas)
print("Qual o número que você acha que nós escolhemos?")
chute_usuario = int(input("Digite um número e teche ENTER: "))  # Os dados numéricos coletados do usuário, por padrão
                                                                # Python,são sempre uma STR. Daí a necessidade de se
                                                                # converter essa coleta para INT. Isso evita erros.
print()

# COMEÇO DO LOOP OU LAÇO
for rodadas in range(1, tentativas + 1):  # Essa função serve para manter o laço(variável rodadas, incremntada
                                          # automaticamente) dentro de um limite(range). O limite, neste caso,
                                          # vai do 1 INCLUSIVE até o último número indicado pelo usuário EXCLUSIVE.
                                          #  Daí a necessidade de 'tentativas + 1.

    # CRIAÇÃO DE VARIÁVES PARA OS TESTES DE CHUTES DO USUÁRIO
    chute_menor = chute_usuario < num_secreto  # Criação das variáveis para as condições if. Essas variáveis devem ser criadas
    chute_maior = chute_usuario > num_secreto  # dentro do laço do "for" para que sejam sempre atualizadas pelo próximo
    chute_correto = chute_usuario == num_secreto  # input do "chete_usuario".
    chute_diferente = chute_usuario != num_secreto

    # BLOCO DE TESTES DOS CHUTES DO USUÁRIO
    if (chute_diferente):
        if (chute_usuario < 0):
            print("Este jogo não adimite números negativos")
            continue  # O comando continue força o retorno ao início do laço.

        print(chute_usuario, "não é o nosso número secreto!", end="\n")# END permite a inserção de uma STR antes da
                                                                       # barra e o N depois da barra quebra a linha.
        input("Tecle ENTER para te darmos uma dica")
        print()

        if (chute_menor):
            print(chute_usuario, "é menor que o nosso número")
            print()
        elif (chute_maior):
            print(chute_usuario, "é maior que o nosso número")
            print()
    elif(chute_correto):
        break          # O comando break força a parada do loop.

    # GARNTINDO AS DEMAIS INTERAÇÕES COM O USUÁRIO DENTRO DO LOOP
    if (rodadas < tentativas):
        print("Esta é a tentativa {} de {}".format(rodadas + 1, tentativas))  # String interpolation: É uma função, como
        # forma alternativa, para intercalar o conteúdo
        # de uma variável na frase a ser impressa.
        chute_usuario = int(input("Por favor, digite outro número e tecle ENTER: "))

print()

if(chute_correto):
    print()
    print("***********************")
    print("PARABÉNS! Você acertou!")
    print("***********************")
    input("Tecle ENTER para sair")
else:
    print("Lamento! Mas, você não conseguiu!")
    print("************GAME OVER*************")
    input("Tecle ENTER para sair")