Вторая программа "Сколько гулять?"

Во втором варианте кода (там, где нет else), код выполняется от одного if к другому.
То есть, первый if проверил, что дождь идёт и присвоил minutes значение 0. Всё, вроде, правильно.
Но.
Код выполняется дальше, доходит до второго if, проверяет, что температура от 0 до 20 и считает количество минут, не равное 0.

Как быть?
Вариант первый: использовать else, чтобы следующий if не проверялся, если выполнен предыдущий.
Вариант второй: во второй и третий if добавить проверку itsRaining. Что-то вроде if (!itsRaining && temperature >= 0 && temperature <= 20)

4 лайка

Между тем код неправильный.
Код вернёт неправильное значение, если дождь идёт, а температура — больше 20 градусов.

Полтора часа возился, вышел такой код:

var temperature = 10;
var itsRaining = false;
var minutes;

if (temperature > 20 && !itsRaining) {
    minutes = -temperature + 40;
}

  else {
  minutes = 0;
}

if (!itsRaining && temperature > 0 && temperature < 35 && temperature <= 20) {
  minutes = temperature;
}

Лишь методом “научного тыка” удалось определить, что else нужно вставлять в середину, хотя по логике else направшивается в конец. Так и не понял, почему так происходит. Если кто может объяснить - буду благодарен.

if (itsRaining || temperature <= 0 || temperature >= 35){
   minutes = 0;
} else if (temperature <= 20) {
   minutes = temperature ;
} else {
   minutes = temperature - (temperature - 20);
}

minutes = -temperature + 40;

спасибо, помогло)

Но не понимаю в чём у меня ошибка была.

У Вас написано: minutes = temperature - (temperature - 20), соответственно: minutes = 20, так как temperature - temperature = 0;

Мда, пора обратно в школу… спасибо.
Сбил с толку ответ FAIL: minutes == 18
Решил что это мой ответ и система его не принимает, а не ожидаемый ответ.

Загуглил как взять модуль числа в JS. Не хотел писать ещё условий.
Вот такое решение:

Решение
var temperature = 20;
var itsRaining = false;

var minutes = 20;

if (itsRaining || temperature < 0 || temperature > 35 ) {
  minutes = 0;
} else {
  minutes = 20 - Math.abs((20 - temperature));
}

console.log('Прогулка может длиться ' + minutes + ' минут.');

JS курс нравится больше чем CSS. Никаких % и т.п.
Надоело пиксели подбирать :sweat_smile:

1 лайк

@Ineska, что скажешь?

var temperature = 20;
var itsRaining = false;

if(itsRaining) {
minutes = 0;
console.log(‘Кекс, идет дождь, прогулка равна ’ + minutes + ’ времени.’);
}

if(temperature < 0 || temperature > 35) {
minutes = 0;
console.log(‘Кекс, на улице ’ + temperature + ’ поэтому погулять снова ’ + minutes + ’ минут.’);
}

if(!itsRaining && temperature == 15) {
minutes = 15;
console.log(‘Кекс, сегодня будем гулять ’ + minutes + ’ минут!’);
}

if(!itsRaining && temperature == 22) {
minutes = 18;
console.log(‘Кекс, пошли гулять на ’ + minutes + ’ минут!’);
}

var minutes;

у вас получается, что гулять можно только при двух температурах: 15 и 22 , а в остальных случаях, похоже, Кексу придется сидеть дома.
да, и переменные нужно объявлять до их использования в условиях, разве нет?

1 лайк

Я не понял просто как сделать последнее условие. Там вроде бы на цикл похож, что чем ниже температура, тем меньше гулять в минутах. У вариантов выше применяют math.abs что ли, я не знаю что это.
Буду благодарен, если поясните.
А по поводу переменных это minutes? Имеете в виду объявлять их перед каждым условием if?

var temperature = 20;
var itsRaining = false;

var minutes;

if (temperature > 0 && temperature < 35 && !itsRaining)
{
if(temperature >= 20 )
{minutes = 20 - (temperature - 20)}
else
{minutes = 20 - (20 - temperature)}
console.log(‘Мяу!Приятной прогулки на ’ + minutes + ’ минут’);
}
else
{minutes = 0}
console.log(‘Не “летная” погода.Лучше посидеть дома.’);

Код работает, но в консоль выводится два сособщения. Не могу понять почему.

последнее сообщение находится не внутри условия - поэтому оно будет выводится всегда. Если при этом ещё и сработает условие - то выведется и сообщение про количество минут прогулки.

цикл - это когда перебираются все значения определенного диапазона, а у вас каждый раз Кекс спрашивает про одну какую-либо температуру.

объявить её один раз, но до использования в условиях.

Я использовал только то, что было в заданиях по данному курсу, ничего лишнего, что не встречалось я не использовал. Рад, что все получилось сделать самостоятельно. Код работает на 100%:

var temperature = 22;
var itsRaining = false;
var constTemperature=20;
var minutes;
if(temperature >=35 || temperature <=0 || itsRaining){
minutes=0;
}
else{ 
if(temperature>constTemperature) {
minutes=constTemperature-(temperature-constTemperature);}
else {
minutes=20;}

  if(temperature<constTemperature){
    minutes=constTemperature-(constTemperature-temperature)}
}
console.log('You can go out for walking for '+minutes+' minutes');

А я вот так решил эту задачу.

Код

var temperature = 20;
var itsRaining = false;

var minutes;

if (itsRaining == true) {
minutes = 0;
}
if (temperature < 0 || temperature > 35 && itsRaining == false) {
minutes = 0;
}
if (temperature == 20 && itsRaining == true) {
minutes = 20;
}
if (temperature > 20 && temperature < 35 && itsRaining == false) {
minutes = temperature - 4;
}
if (temperature <= 20 && itsRaining == false) {
minutes = temperature;
}

Спасибо. Да не учел если температура будет 20. чтобы это учитывалось достаточно изменить во втором условии в сравнении с if (!itsRaining && temperature < 20) на if (!itsRaining && temperature <= 20).

Получилось немного запутано, но мне сразу пришла в голову такая формулировка кода:

var temperature = 31;
var itsRaining = false;
var minutes;

if (itsRaining || temperature > 35 || temperature < 0) {
  minutes = 0;
} else if (temperature > 0 || temperature < 35) {
  if (temperature === 20) {
    minutes = 20;
  } else if (temperature < 20) {
  minutes = temperature;
  } else {
    minutes = 20 - (temperature - 20);
  }
}

Мой кот.

var temperature = 20;
var itsRaining = false;

var minutes;

if (itsRaining || temperature < 0 || temperature > 35) {
minutes = 0;
console.log (‘Лучше посидеть дома!’)
} else if (temperature == 20) {
minutes = temperature;
console.log (‘Перфектно! Можно гулять целых ’ + minutes + ’ минут.’)
} else if (temperature < 20) {
minutes = 20 + (temperature - 20);
console.log (‘Время прогулки ’ + minutes + ’ минут.’)
} else {
minutes = 20 - (temperature - 20);
console.log (‘Время прогулки ’ + minutes + ’ минут.’)
}