Legat de functia "while" in combinatie cu "prompt"

Salut oameni faini! Revin cu o intrebare, tot la categoria de incepator.

Avem codul:

let input = prompt("ENTER PASSWORD:");
while (true) {
    input = prompt(input);
    if (input.toLowerCase() === "stop copying me") break;
}
    console.log ("OK YOU WIN");
  1. Daca pun parola corecta din prima, raman blocat in prompt cu orice pun, atat corect cat si gresit. Ramane loop-ul cu orice pun. Daca pun parola dupa prima greseala spre ex, merge.

  2. De ce “input = prompt(input)” si nu "input = prompt(“ENTER PASSWORD”). De ce merge prima varianta (cea a profului de pe curs) si a mea nu? De ce sa nu mearga amandoua at least?
    Ce cred eu aici e ca input in paranteza repr. faptul ca JS stie deja la care ma refer fiindca i-am mentionat anterior, deci asa este regula… I guess…

  3. Daca am codul

if (true) {
    input === "stop copying me"
    console.log("SUCCESS!");
}

atunci merge lejer din prima parola, deci looping-ul meu sau break-ul creeaza o incertitudine… sunt incepator, poate complic situatia, dar imi place maxim sa pot controla fiecare chestie/ipostaza, de aceea insist pe detalii de genul. Sper ca nu exagerez sau ceva. Va multumesc mult!

poate ceva de genul ăsta:

let authorized = false;
while (!authorized) {
    let input = prompt("ENTER PASSWORD:");
    if (input.toLowerCase() === "stop copying me") {
        authorized = true;
    }
}
console.log ("OK YOU WIN");

do{…}while() cred ca-i fix ce-ti trebuie.

let authenticated = false;
do{
    const input = prompt("Enter pass");
    if(input === 'x'){
        authenticated = true;
    }
}while(!authenticated)

ps: la pt2 o sa-ti faca prompt la ce-ai introdus anterior. input o sa tina textul introdus de tine si o sa-l afiseze ca mesaj in prompt.

edit: si mai simplificat

let input = '';
do{
    input = prompt("Enter pass");
}while(input !== 'x')

Nu folosi prompt, alert…

Daca vrei sa fii elegant faci o functie recursiva.

E.g. createPrompt care ia o functie si creeaza un prompt la final.

createPrompt(createPrompt(“intrebare”))

La exit clause pui ce ai si in while si returnezi mereu input string-ul la intrebare.

nu stii care-i cerinta.

omul nu intelege bine conceptul de loop si tu ii zici de functii recursive?

2 Likes

Nici măcar nu-i o idee bună să folosești recursivitate într-o buclă potențial infinită, că teoretic poți să greșești parola până se termină memoria. Nu mai vorbim de faptul că ăsta ar putea fi un potențial vector de atac de tip denial of service.

1 Like
  1. Daca pun parola corecta din prima, raman blocat in prompt cu orice pun, atat corect cat si gresit. Ramane loop-ul cu orice pun. Daca pun parola dupa prima greseala spre ex, merge.

Eu nu vad acest comportament.
Daca introduci “stop copying me” si apoi inca o data “stop copying me”, se opreste.

De ce “input = prompt(input)” si nu "input = prompt(“ENTER PASSWORD”). De ce merge prima varianta (cea a profului de pe curs) si a mea nu?

Nu inteleg la ce te referi.
Functia “prompt” afiseaza parametrul ca mesaj Window: prompt() method - Web APIs | MDN

  1. if (true) {
    input === “stop copying me”
    console.log(“SUCCESS!”);
    }

if(true) se va rula o singura data.

1 Like

Perfect! Am mai invatat o ipostaza in care pot folosi negarea ('!"), absolut supeeeer! Mersi mult! <3

Poti sa-mi explici si sa-mi arati si un cod aditional acestuia in care daca dau cancel la prompt (oricand vreau eu), acesta sa se inchida, sa nu ma tina in loop pana introduc parola?

Hai ca usor usor prind mersul… sunt la inceput si de aia… e chiar foarte fain totul, iti pune mintea la contributie, nu te lasa sa ramai in confort absolut niciodata :slight_smile:

Eu nu vad acest comportament.
Daca introduci “stop copying me” si apoi inca o data “stop copying me”, se opreste.

Pai de ce trebuie sa introduci prima oara ceva in loc s-o ia din prima cu raspunsul corect? Asta voiam sa intreb.

Nu inteleg la ce te referi.
Functia “prompt” afiseaza parametrul ca mesaj
De ce trebuie scrisa functia la modul “prompt(input)”, dar am inteles logic la mintea cocosului acum de ce. Variabilele sunt unice in nume, iar cand pui prompt ca si radacina parinte si in paranteza variabila, ai explicat perfect ceea ce cauti. Nu mai detaliez, important e ca am inteles acum. Mersi pentru raspuns, anyway!

Tinere, partea de a 2-a a lectiei ti-o faci singur totusi.

Macar fa si tu cinste cu un McNuggets tocilarului din clasa care stie programare, chiar asa gratis vrei?

1 Like

citeste documentatia. partea de return e destul de interesanta.

Eu cred ca nu intelege ce face input in prompt, ce cere el e recursiv si poate a invatat deja de undeva.

Am rezolvat, guys! Mersi mult! Nu ceream mura-n gura @kilogrammer - nu intelegeam. Acum am inteles totul cu mai mult efort si focus.

Multumesc fain tuturor!