2013-09-25 4 views
0

Вот проблема: «Напишите программу, которая печатает цифры от 1 до 100. Но для кратных трех напечатать« Fizz »вместо числа и для кратных пяти напечатать« Buzz ». числа, кратные как трех, так и пяти печатным «FizzBuzz» ».Ruby FizzBuzz And/or

Мой код ниже работает, но я не понимаю, почему на последней строке это f || b и не f & b?

Не должны ли оба И И b должны быть правдой, чтобы вернуть FizzBuzz, а не f ИЛИ b?

puts (1..100).map {|i| 
    f = i % 3 == 0 ? 'Fizz' : nil 
    b = i % 5 == 0 ? 'Buzz' : nil 
    f || b ? "#{ f }#{ b }" : i 
} 
+5

Как вам удалось написать рабочий код, который вы не понимаете? – Blorgbeard

+0

Просто используйте код на бумаге для значений 'i' like' 3', '5',' 15' и '1'. – millimoose

+0

Я пробовал и сначала, потому что думал, что это сработает. Затем я попробовал || и это сработало. Вот как я справился. – hopheady

ответ

3

f || b верно, если f не является нулевым илиb не является нулевым, или оба, потому что это часть определения OR.

Если это выражение истинно, то мы выводим "#{ f }#{ b }", который будет печатать либо Fizz, Buzz или FizzBuzz в зависимости от того, f или b (или ни) равны нулю, так как нулевая переменная будет заменена пустой строкой.