Timkor

elevator

May 8th, 2021 (edited)
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. zero.p2p.shpp.me/tasks/2_3_lift.html - не забувайте додавати лінк на завдання, так зручно)
  3.  
  4.  
  5. * Здравствуйте. Не могу до сих пор разобраться с задачей про лифт. Если в 4 строке я закрываю блок,
  6. * то в строке 5 не распознается переменная password. Если оставить открытым блок в строке 4,
  7. * тогда  переменная распознается, но код все равно не работает, так как в строке 6 последний символ
  8. * подчеркнут красным
  9. *
  10.  
  11. let lift = prompt ('який номер поверху?')
  12. if (lift < 1 || lift > 9) { console.log("невірний поверх")}
  13. if ((lift >= 1 && lift <= 3 || lift >= 7 && lift <= 9)) {console.log('ok')}
  14. else { let password = prompt('ввести пароль')              // рядок 4
  15.     if (password != 1337) {console.log('невірний пароль')} // рядок 5
  16.     else { console.log ("ok")}                             // рядок 6
  17.  
  18. добре, що ви описали ситуацію з якою розбираєтесь, але круто коли ще додати що ви думаєте з цього приводу,
  19. чому так відбувається, а ще чим конретніші питання - тим краще, є думка, що коли ви будете конкретизувати питання та
  20. надавати свої думки щодо відповіді - то питання може не витримати і перетворитися на відповідь, навіть не обов'язково опівночі.)
  21. І це надасть більше інформації щодо того, яка допомога вам буде корисна. Намагатимусь влучити:
  22. let - це ключове слово, що створює змінну, як ви вже помітили змінну з блочною видимістю, тобто створена в блокі змінна
  23. не буде видна в інших зовнішніх блоках. У вкладених буде: */
  24. let globalVariable = 42; /* ця змінна буде видна просто скрізь у вашому коді, вона глобальна, тобто створена у самому
  25. зовнішньому скоупі, блокові, він такий глобальний, що навіть фігурними не обозначається, але наче вони є.)
  26. */
  27. {
  28.     console.log("і тут є globalVariable = " + globalVariable);
  29.     {
  30.         let localVariable = 1;
  31.         console.log("в цьому блокові створили змінну а = " + localVariable);
  32.         console.log("і тут є globalVariable = " + globalVariable);
  33.         {
  34.             console.log("тут змінна а видна, бо це вкладений блок, а = " + localVariable);
  35.             console.log("і тут є globalVariable = " + globalVariable);
  36.             {
  37.                 console.log("і тут змінна а видна, як і у всіх блоках вкладених в той, де її створено а = " + localVariable);
  38.                 console.log("і тут є globalVariable = " + globalVariable);
  39.             }
  40.         }
  41.     }
  42.     console.log("цей блок зовнішній від того, де створили змінну а, тут її не існує, а =" + a);
  43.     console.log("і тут є globalVariable = " + globalVariable);
  44. }
  45. {
  46.     console.log("тут а не існує, бо це інший блок, а = " + a);
  47.     console.log("і тут є globalVariable = " + globalVariable);
  48. }
  49. console.log("і тут є globalVariable = " + globalVariable);
  50. /* глобальні змінні майже завжди гірші ніж локальні, тому що вони можуть вносити неоднозначність, в той час як локальні -
  51.  добрі, бо нікуди далі свого блоку не йдуть, не забруднюють інші пространства імен, але про це згодом, поки навчитбся
  52.  створювати змінну там, де вона потрібна та має бути видна.
  53.  
  54.  Такий запис -  коли індентація відокремлює блоки в фігурних дужкаї є більш читабельна та відповідає кодстайлу, раджу.
  55. * Відформатував автоформатом (можна зазернути в закріплені коменти в чаті в дискорді, там є про це) ваш код:*/
  56.  
  57.  
  58.  
  59. let lift = prompt('який номер поверху?')
  60. if (lift < 1 || lift > 9) {
  61.     console.log("невірний поверх") /* якщо введено невалідний поверх, то ми зайдемо в цей іф, виведемо "невірний поверх"
  62.     та подальші умови можна вже не обробляти, тут може стати в пригоді слово else, яке каже
  63.     якщо ця умова виконується {
  64.         роби це
  65.     } інакше {
  66.         роби те
  67.     }
  68.     тобто перевіряти далі треба тільки коли поточна умова не виконається. А ще використання цього слова
  69.     дасть впевненість, що ми не опинимося в коді нижче з невалідним поверхом, я вкажу де саме це викличе невірну роботу
  70.     ліфта */
  71. }
  72. if ((lift >= 1 && lift <= 3 || lift >= 7 && lift <= 9)) {
  73.     console.log('ok')
  74. } else { // поміркуйте, чи опинимося ми тут, коли ввели невалідний поверх? Той що менше 1 або більший за 9?
  75.     let password = prompt('ввести пароль')
  76.     if (password != 1337) {
  77.         console.log('невірний пароль')
  78.     } else {
  79.         console.log("ok")
  80.     } // тепер тут каже, що не закритий блок, тобто не вистачає закриваючої фігурної дужки
  81.  
  82.  
  83. /* Раджу закрити блок, щоб не було помилки і можна було потестити подебажити програму. ЩОб було зручніше та наочніше
  84. дебажити відлагоджувати, можна скористатися логуванням: додати виведення у консоль якоїсь інформації на різних блоках
  85. вашої програми, щоб при тестуванні ви мали можливість бачити, куди саме заходить код. Як завжди можна докрутити код
  86. декількома способами.  Можна додати перевірку після вашого елсу що ведений саме запаролений поверх. Але цього робити
  87. не прийдеться, якщо використати елсе після першого іфу.
  88. О, назва змінної
  89. lіft як на мене не зовсім добра, поверх приймає, то краще так і іменувати.
  90. Гарного коду.
  91.  */
Add Comment
Please, Sign In to add comment