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

problemas em dar mais tentativas ao usuário

usando das ferramentas as quais foram me proporcionadas até a aula que assisti, tentei desenvolver um programa que crie um número aleatório entre 0 e 10, fornecesse um campo para que o usuário coloque um número, e um botão para que teste se o número digitado seria o mesmo que o programa escolheu sendo que , depois da terceira tentativa do usuário , o programa escolheria aleatoriamente outro número.

o resultado nao está sendo o esperado, o programa somente está repetindo duas vezes 'você errou', sem deixar o usuário tentar de novo.


<h1>escolha um número entre 0 e 10</h1>

<input>
<button> o número advinhado foi </button>



<script>


    //funçôes

    function line () {

        document.write("<br>")

    }

    function show(a) {

        document.write(a)
        line()

    }


    var segredo = Math.round(Math.random()*10);

    function verify() {

            var tentativas = 0;


        while( tentativas < 2) {

            var input = document.querySelector("input");


            if (input.value == segredo ) {

                alert ("você acertou!");
                break;

            } else { 

                alert("você errou");
                tentativas=tentativas+1;


            }
        }
    }



        var button = document.querySelector("button");
        button.onclick = verify;



</script>
3 respostas

Oi Luís. Em primeiro lugar, quero lhe dar os parabéns por tentar combinar tudo o que aprendeu em um único programa. Isso demonstra que você quer ir além, qualidade de todo bom desenvolvedor.

Agora, vamos ao seu código. Vou lhe fazer algumas perguntas e você tenta responder para você mesmo, não precisa me responder:

1 - o while que é executando quando o botão é chamado é necessário?

2 - O que acha de a cada clique do botão você guardar quantas vezes ele foi pressionado para saber se o usuário já atingiu o máximo de tentativas que é 3? No caso, o while foi usando em outros exercícios para que pudesse perguntar novamente através de prompt a entrada do usuário, mas aqui, como o input já é exibido na tela e não some... o while parece ser desnecessário.

Então, com base nessas perguntas, eu alterei o seu código, tentando modificá-lo o menos possível para aproveitar a sua lógica atual. Se ela precisa ou não ser refinada, você é que vai me dizer.

<h1>escolha um número entre 0 e 10</h1>

<input>
<button> o número advinhado foi </button>



<script>
    //funçôes

    function line() {

        document.write("<br>")

    }

    function show(a) {

        document.write(a)
        line()

    }


    var segredo = Math.round(Math.random() * 10);

    // cola para o desenvolvedor saber qual foi o número sorteado
    console.log(segredo);

    var tentativas = 0
    function verify() {

        // mesma coisa que tentativas = tentativas + 1
        tentativas++;

        // estou fazendo 3 tentativas
        if(tentativas <=3) {

            var input = document.querySelector("input");

            if (input.value == segredo) {

                alert("você acertou!");
                // não precisa tentar mais uma vez, faz sair do if
                tentativas = 4;
            } else {

                alert("você errou");
            }
        } else {

            alert('O número pensado foi ' + segredo + '. Recarregue a página para jogar novamente.');
        }
    }
    var button = document.querySelector("button");
    button.onclick = verify;

</script>

Reflita sobre o código. Se por acaso ele não encarna a ideia que você queria, só o fato de tentar entendê-lo esclarecerá bastante coisa.

Aliás, nunca desista. Quando comecei a programador não era o melhor aluno da minha turma, inclusive pensei até em desistir. Hoje, sou instrutor do alura e tenho mais de um livro publicado e uma filha linda.

Boa cangaceiro. Aguardo seu feedback depois sobre o código. Qualquer dúvida grite.

Como a intenção é estudo, não irei dar a resposta exata, mas vou dar algumas pistas do "erro" que está ocorrendo e como chegar ao resultado que você espera:

1 - Está repetindo 2x a mensagem de erro pois você colocou um laço de repetição exatamente na função que verifica o número. Se a intenção é o usuário tentar um X número de vezes, então não deve existir nenhum laço;

2 - A sua variável de tentativas está dentro do escopo da função de tentativa, logo ela sempre será definida como 0, ao contrário da sua variável segredo, que está no escopo geral;

3 - Você ainda precisará verificar se o número de tentativas é igual o valor máximo de tentativas e gerar novamente o valor da variável segredo (talvez com uma função?) e também gerar novamente caso ele acerte.

Creio que a partir daí você conseguirá identificar onde errou.

Bons estudos!

solução!

fico feliz pelo elogio, e agradeço as respostas, continuarei o curso em logica de programação 2. acidentalmente coloquei esta resposta como solução, gostaria de esclarecer que foram as respostas de ambos os instrutores que resolveram meu problema.