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

У меня таким образом получилось. Но не совсем по правилам. У кого еще какие варианты?

Код
var temperature = 22;
var itsRaining = false;
var err = 20 - temperature;
var minutes;

if (itsRaining || !itsRaining && temperature > 35 || temperature <= 0) {
  minutes = 0;
}  else if (temperature == 20 ) {
  minutes = 20;
}
else {
   minutes = 20 - Math.abs(err);
}
console.log('Сегодня можно гулять ' + minutes + ' минут');

Я решил таким способом:

Код
var temperature = 35;
var itsRaining = false;
var minutes = 20;
var i;

if (itsRaining || temperature < 0 || temperature > 35){
  minutes = 0;
  console.log('Прогулка длится ' + minutes + ' минут');
} else {
  if (!itsRaining && temperature < 20){
    minutes = temperature;
    } else {
      if (!itsRaining && temperature > 20){
        i = temperature - 20;
        minutes = minutes - i;
        console.log('Прогулка длится ' + minutes + ' минут');
        }
      }
}
2 лайка

Мне очень нравится, только один случай не учли, когда температура равна 20.

У меня решение вышло таким:

Код
var temperature = 10;
var itsRaining = false;
var minutes;
if (temperature > 0 && temperature < 35 && !itsRaining) {
  minutes = 20 - Math.abs(temperature - 20);
  console.log('Время прогулки: ' + minutes + ' минут.');
} else {
  minutes = 0;
  console.log('Прогулка не состоится.');
}

Но!
Операция Math.abs() в течении курса нигде не упоминается.
Возможно она упоминалась где-то в других курсах, но в “Знакомство с JavaScript” и “Условия” я её не видела.

Конечно, можно обойтись и без нее, но количество кода вырастет:

Код
var temperature = 20;
var itsRaining = false;
var minutes;
if (temperature > 0 && temperature < 35 && !itsRaining) {
  if (temperature <=20) {
    minutes = temperature;
  } else {
    minutes = 20 - (temperature - 20);
  }
  console.log('Время прогулки: ' + minutes + ' минут.');
} else {
  minutes = 0;
  console.log('Прогулка не состоится.');
}
3 лайка

Я знаю, что операция определения модуля числа не была разобрана в курсах. Поэтому и указала, что код не совсем соответствует правилам.

Без abs но с тернарным оператором условия.

Код
if (itsRaining || temperature < 0 || temperature > 35) {
  minutes = 0;
} else {
  var diff = 20 - temperature;
  minutes = 20 - (diff >= 0 ? diff : -diff);
}
4 лайка

Красиво. О том, что можно вложить условную конструкцию в саму формулу расчета, я не знала.

У меня получилось два варианта.

  1. Первый вариант более компактный “Можно гулять или нет”
Код

var temperature = 0;
var itsRaining = false;
var minutes;
if ( temperature > 0 && temperature < 35 && !itsRaining) {
if (temperature > 20){
minutes = 20 - (temperature - 20);
console.log(‘Время прогулки ’ + minutes + ’ минут.’);
}
else {
minutes = temperature;
console.log(‘Время прогулки ’ + minutes + ’ минут.’);
}
}
else {
minutes = 0;
console.log(‘Время прогулки ’ + minutes + ’ минут.’);
}

  1. Второй вариант более дружелюбный
Код

var temperature = 34;
var itsRaining = false;
var cold = 0;
var hot = 35;
var idealTemperature = 20;
var minutes;
console.log(‘Проверка данных…’);
if (!itsRaining){
console.log(‘Дождя нет, смотрим температуру воздуха…’);
if (temperature > cold) {
if (temperature < hot || idealTemperature === temperature) {
console.log(‘Не слишком жарко, температура воздуха ’ + temperature + ’ градусов’);
console.log('Считаем время прогулки… ')
if (temperature <= idealTemperature){
minutes = temperature;
console.log(‘Время прогулки ’ + minutes + ’ минут.’);
}
else {
minutes = idealTemperature - (temperature - idealTemperature);
console.log(‘Время прогулки ’ + minutes + ’ минут.’)
}
}
else {
minutes = 0;
console.log(‘Отрицательной температруры нет, но слишком жарко. Время прогулки ’ + minutes + ’ минут’);
}
}
else {
minutes = 0;
console.log(‘Температура воздуха ’ + temperature + ’ градус(ов). Время прогулки ’ + minutes + ’ минут’);
}
}

else {
minutes = 0;
console.log(‘Время прогулки ’ + minutes + ’ минут, т.к. идет дождь.’);
}

А мне первый нравится больше.

1 лайк

Решил привязался к температуре, потом ввел переменную “идеальная температура” и от нее уже вывел другую часть ветки. Не знаю правильно по логике или нет, но вроде без ошибок.

var temperature = 20;
var itsRaining = false;
var idealTem =20;
var minutes;

if (itsRaining || 0>temperature || temperature>35 ) {
minutes=0;
} else if(temperature <= 20) {
minutes=temperature
} else {
minutes=idealTem-(temperature-idealTem);
}
console.log(‘Прогулка длится ’ + minutes + ’ минут’);

В последнем выводе в консоль тоже сообщение по логике должно быть, а то число только выводится.

да-да, точно. Спасибо)

let temperature = 20;
let itsRaining = false;
let minutes;

if (itsRaining || temperature < 0 || temperature > 35) {
minutes=0;

} 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;
}
else if (temperature>=0 && temperature<=20) {
minutes=(20-(20-temperature));
}
else if (temperature>20 && temperature<=35) {
minutes=(20-(temperature-20));
}

Но когда сначала было без “else”, вот таким образом:

var temperature = 20;
var itsRaining = false;

var minutes;

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

испытание не засчитывалось и в первом тесте выдавало ошибку false
Не подскажете, почему так? Какое правило было нарушено?

Да, странная ситуация. Наверное, ожидается использование блока else, если условий несколько. Подождем комментария от модератора форума @juwain.

1 лайк

var temperature = 20;
var itsRaining = false;

var minutes;

if (!itsRaining && temperature == 20) {
console.log(minutes = 20)}

if (!itsRaining && temperature>20) {
console.log(minutes = 20-(temperature-20))}

if (!itsRaining && temperature<20) {
console.log(minutes = 20+(temperature-20))}

else if (itsRaining || temperature<=0 || temperature>=35){console.log(minutes=0)
};
Все прошло нормально.

У меня вот так получилось но не понимаю почему не работает .Может подскзать.Спасибо!

var temperature = 15;
var itsRaining = false;
var goodTemperature = temperature < 0 || temperature > 35;
var perfectTemp = 20;
var minutes;

//* РЕШЕНИЕ
if(!itsRaining && !goodTemperature){
if(perfectTemp) {
minutes=20;
console.log(‘Гуляем ’ + minutes + ’ минут’);
}
else {
minutes = 20-(goodTemperature-perfectTemp);
console.log('Тогда гуляем ’ + minutes + ‘минут’);
}
}

Решил вот так получилось:
var temperature = 20;
var itsRaining = false;
var perfTemp = 20;
var minutes;

if(!itsRaining && temperature > 0 && temperature < 36) {
if(temperature<20) {
minutes = temperature;
console.log(‘Прогулка длиться ‘+minutes+’ минут’);
}
if(temperature>20) {
minutes=perfTemp-(temperature-perfTemp);
console.log(‘Прогулка длиться ‘+minutes+’ минут’);
}
}
else {
minutes=0;
console.log(‘Длительность прогулки равняется ’ +minutes+’ минут’);
}
if(perfTemp) {
console.log(‘Идеальная прогулка на 20 минут’);
}

испытание засчитывается и вот так:
if (itsRaining||temperature<0||temperature>35){
minutes=0;
}
else{temperature>=0 && temperature<=20
minutes=(20-(20-temperature));
}
if(temperature>20 && temperature<35) {
minutes=(20-(temperature-20)) ;
}

Спросил у авторов, ответим вскоре.