Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
5
respuestas

¿Es while infinito?

No importa cuántas veces se acierte, no logro salir del bucle: Ingreso número, le doy al botón ok, acierto el número, le doy al botón ok, el juego me felicita, le doy al botón ok, me pide que adivine el número...y todo vuelve a empezar. Probablemente mencionen cómo detener el bucle en los siguientes vídeos, pero en lo personal, preferiría que fuera en una sola lección. ¡Saludos!

5 respuestas

Podrías mostrar como tiene el código, porque cuando aciertas el número el juego debería de terminar, no tendría que seguir pidiendo que adivines el número, a menos que tu vuelvas a iniciar el código.

Esto es lo que tengo:

let numeroSecreto = 2;
let numeroUsuario = 0;
let intentos = 1;
let palabraVeces = 'vez';

while(numeroUsuario != numeroSecreto){
    let numeroUsuario = prompt ("Me indicas un número entre 1 y 10:");

    console.log(numeroUsuario);
    if (numeroUsuario == numeroSecreto) {
        alert (`¡Enhorabuena! Acertaste, el número es: ${numeroSecreto}. Lo hiciste en ${intentos} ${palabraVeces}.`);
    } else {
        if(numeroUsuario > numeroSecreto){
            alert('El número es menor');
        } else {
            alert('El número es mayor');
        }
        intentos = intentos + 1;
        palabraVeces = 'veces';
    }
    console.log(numeroUsuario == numeroSecreto);
}

El While es infinito mientras la condición siempre se cumpla, si pudieras compartir tu código para poder ver donde está el problema de tu while infinito con gusto podría ver la manera en apoyarte. Recuerda que los videos están diseñados para que las personas puedan verlos en sus tiempos que ellos logren acomodar, si hacen las sesiones muy largas las personas pueden no terminar de verlas o sentirse presionadas con mucha información, por eso no llevemos prisas, todo a su tiempo compañera, para esto está el foro para ayudarnos a resolver esas dudas en caso de que se les haya pasado decir algo o que no hayamos entendido nada :D ¡Saludos!

solución!

let numeroSecreto = 2; let numeroUsuario = 0; let intentos = 1; let palabraVeces = 'vez';

while(numeroUsuario != numeroSecreto){ //Aquí esta el error estás inciando nuevamente la variable numeroUsuario, la línea de código quedaría así //numeroUsuario = prompt ("Me indicas un número entre 1 y 10:");, solo tienes que quitar el let let numeroUsuario = prompt ("Me indicas un número entre 1 y 10:");

console.log(numeroUsuario);
if (numeroUsuario == numeroSecreto) {
    alert (`¡Enhorabuena! Acertaste, el número es: ${numeroSecreto}. Lo hiciste en ${intentos} ${palabraVeces}.`);
} else {
    if(numeroUsuario > numeroSecreto){
        alert('El número es menor');
    } else {
        alert('El número es mayor');
    }
    intentos = intentos + 1;
    palabraVeces = 'veces';
}
console.log(numeroUsuario == numeroSecreto);

}

La razón por la que tienes un bucle infinito es por que estás usando un let dentro del ciclo while. El error que está ocurriendo es debido al escopo de let. Es un poco complicado de explicar el porqué pero trataré de hacer mi mejor esfuerzo :) Recordemos que no usamos las variables de tipo var para evitar problemas con la coherencia del código, ya que estas tipos de variables tienen un escopo dentro y fuera de su bloque código. Por ejemplo, digamos que creas una función y dentro de la función creas la variable var num. Supongamos que unas lineas antes imprimiste esta variable a pesar de no haberla declarado antes de la función. (Vease ejemplo 1)

//Ejemplo 1
alert(num);
//Ignora lo que haga la función, todavía no sé crearlas
function suma(num,8){
    var num =3;
}

Si compilas este código, no te marcará ningún error (suponiendo que la función fuera válida). Sin embargo, no tiene coherencia dado que al momento de imprimir 'num' con la función alert(), te devolverá un valor de 'undefined'. Por lo tanto, puede ser que no tengas los resultados esperados y no encuentres un error aparente. Para evitar esto, se pueden usar las variables de tipo let. Veamos ahora que pasa si usamos let en vez de var. (Vease ejemplo 2)

//Ejemplo 2
alert(num)
function suma(num,8){
    let num =3;
}

Si intentas compilar el código del ejemplo anterior, todo el código te devolverá un error, diciendote que no se puede imprimir la variable de num por que no se ha inicializado ni declarado si quiera. Aunque se declaró dentro de la función, solo se limita a ese bloque de código específico y no se puede usar fuera de ese bloque. Establecido lo anterior, es más recomendable usar variables de tipo let en todos tus códigos hasta que te digan lo contrario. Una vez que declaras una variable con let, no es necesario volver a poner let al asignarle un nuevo valor a esta variable. En el ejercicio del video, se inicializa la variable con un valor cualquiera, no importa cuál valor se le ponga, mientras sea diferente del valor al que se le está comparando. Esto es para que puede iniciarse el ciclo while. Dentro del ciclo while no es necesario volver a poner let al asignarle el nuevo valor con el prompt. De lo contrario, es como si estuvieras creando una nueva variable completamente diferente y nueva dentro del ciclo while, cuya operación únicamente afectaría al bloque de código del ciclo while y no a todo el código fuera del while. El código corecto debería quedar así:

let numeroSecreto = 4;
let numeroUsuario = 0;
while(numeroUsuario != numeroSecreto){
    numeroUsuario = prompt('Me indicas un número entre 1 y 10 por favor: ');

    console.log(numeroUsuario);
    
    if (numeroUsuario == numeroSecreto){
        alert(`Acertaste, el número es: ${numeroUsuario}`);
    }else {
        if (numeroUsuario > numeroSecreto){
            alert('El número secreto es menor');
         }else{
             alert('El número secreto es mayor');
         }
    }
    
}

Te recomiendo ir a la documentación del capítulo uno y leer la parte de los Tipos de variables. Ahí manda a una nueva pestaña sobre cómo funcionan estas. Gracias por leer todo mi comentario, espero que haya sido de ayuda y lamento un poco la redacción. Estoy al pendiente en caso de que esté mal o haya que cualquier otra duda. :)