FizzBuzz


#1

Что-то совсем не получается этот вызов пройти.
Вопрос, тут решение основано только на тех знаниях которые были получены за 2 курса или какую-то информацию надо найти дополнительно?


#2

Здесь потребуется знание оператора % - остаток от деления. В теории он упоминается в курсе “Циклы” - https://htmlacademy.ru/courses/211/run/15
Видимо вызовы лучше проходить уже после основных заданий.


#3

Видимо вызовы лучше проходить уже после основных заданий.

Это да, но этот вызов стоит во второй теме, вот я и предположил, что уже всё знаю для решения.
Я конечно погуглил про оператор %. Но что-то не выходит пока никак. После прохождения курса по циклам, если не получится вернусь на форум с этим вопросом ещё.


#4

Я добавлю в теорию рассказ про оператор «остаток от деления», чтобы было проще. Вызовы — дополнительные задания к главе курса. Спасибо, что обратили на это внимание


#5

Пожалуйста. Приятно, что слышите ваших пользователей! :blush:


#6

Добавила в теории задания кусочек про оператор «остаток от деления» =)


#7

Я уже пробовал раньше выполнять задание для собеседования - здесь сделал по аналогии - работает, пробуйте кому пригодится

var number = 15;
var taskResult;

if(number % 3 == 0 && number % 5 == 0){
console.log((taskResult = “FizzBuzz”));
}else if(number % 3 == 0){
console.log((taskResult = “Fizz”));
}else if(number % 5 == 0){
console.log((taskResult = “Buzz”));
}else{
console.log(taskResult = (number));
}


#8

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

Сводка

var number = 15;
var taskResult;

if (number % 3) {
taskResult = number;
} else {
taskResult = ‘Fizz’;
}

if (number % 5) {
taskResult = number;
} else {
taskResult = ‘Buzz’;
}

if (number % 3 && number % 5) {
taskResult = ‘FizzBuzz’;
}


#9

Чем строже условие, тем выше оно должно располагаться в коде


#10

Вы не указываете, чему именно должен быть равен остаток от деления на 3 или 5. То есть условие расшифровывается как “если есть остаток от деления на …”, любой.


#11

Ну у меня такая логика и была - если есть любой остаток от деления, то есть он больше нуля, условие выполняется, то есть выводится - number. Если нет - Fizz


#12

Я пробовала менять местами, все равно работает через раз :frowning:


#13

Не так. Любой - это и ноль в том числе.
Но вы же понимаете, что любое число будет делиться и на 3, и на 5, с остатком или без - это уже другой вопрос. Тогда в чем смысл ваших условий, если получается, что все варианты подходят под первое, например.


#14

Основываясь на изученном:
“Действие внутри условия выполняется, если вернулось true . Если выражение вернуло false , действие не выполнится.”
"Любые значения внутри проверок приводятся к булеву типу. Все числа кроме 0true , при этом 0false".

Я рассуждала так. "Действие внутри условия выполняется, если вернулось true" - то есть не равно нулю, а значит делится с остатком и выводить нужно number.
Если в условиях получается ноль, то есть число делится на 3 или на пять, то проверка возвращает - false, и идет по ветке else


#15

Просто вам нужно проанализировать решение других, чем оно отличается от вашего и почему их работает, а ваше нет. Здесь настолько примитивно, что указав вам прямо мы окажем медвежью услугу. Учитесь находить ошибки самостоятельно


#16

Про примитивизм не особо вдохновляет, конечно. Почему все другие решения работают, я разобралась. Я написала сюда, чтобы выяснить, что я поняла неправильно. Попробую спросить по другому. На основании двух конспектов из уроков, я не поняла, почему, например, if (number % 3) - не условие. Я поняла, что если условие в скобках будет равно нулю, то действие не выполнится, либо пойдет по ветке else. Правильно? Объясните, пожалуйста, почему нужно обязательно приравнивать оператором == к нулю.


#17

не обязательно, а желательно. Неявное приведение типов не приветствуется, потому что читаемость кода хуже, вот вы например не видите из-за этого тут ошибку if (number % 3 && number % 5)
В вашем коде порядок менять на самом деле не нужно, тут я ошибся


#18

а вот за этот ответ прям спасибо-преспасибо, теперь все ясно)


#19

Вот так решил, прокомментируйте кто-нибудь, пожалуйста)

var number = 15;
var taskResult;

taskResult = number;

if (!(number%3) && (number%5)) {
  taskResult = "Fizz";
}

if (number%3 && !(number%5)) {
  taskResult = "Buzz";
}

if (!(number%3) && !(number%5)) {
  taskResult = "FizzBuzz";
}

#20
var number = 30;
var taskResult;

if (number % 3 === 0 && number % 5 === 0) {
  console.log(taskResult = 'FizzBuzz');
}
if (number % 3 === 0 && taskResult != 'FizzBuzz') {
  console.log(taskResult = 'Fizz');
}
if (number % 5 === 0 && taskResult != 'Fizz' && taskResult != 'FizzBuzz') {
  console.log(taskResult = 'Buzz');
}
if (number % 1 === 0 && taskResult != 'Fizz' && taskResult != 'Buzz' && taskResult != 'FizzBuzz') {
  console.log(taskResult = number);
}