一、需求
写一个程序打印1到100这些数字。但是遇到数字为3的倍数的时候,打印“Fizz”替代数字,5的倍数用“Buzz”代替,既是3的倍数又是5的倍数打印“FizzBuzz”
二、思路
1.使用each方法进行循环
2.在each循环中使用条件语句进行判断
3.根据不同的条件,输出相应的内容
三、实现方法
1.使用each方法进行循环,使用if-elsif-else语句进行条件判断
(1..100).each do |i|
if i%3 == 0 && i%5 ==0
p "FizzBuzz"
elsif i%3== 0
p "Fizz"
elsif i%5 ==0
p "Buzz"
else
p i
end
end
上述代码也可以写为:
(1..100).each do |i|
if i%3 == 0
if i%5 == 0
p "FizzBuzz"
else
p "Fizz"
end
elsif i%5 == 0
p "Buzz"
else
p i
end
end
但不能写成:
(1..100).each do |i|
if I%3 == 0
p "Fizz"
elsif I%5== 0
p "Buzz"
elsif i%3 == 0 && i%5 ==0
p "FizzBuzz"
else
p i
end
end
虽然看上去我们只是把先判断是否能被15整除的这段代码进行了一个简单的位置移动,但是整个代码逻辑就变了。
例如有一个集合[1,2,3,5,15],满足条件则被去除
如果先判断能否被15整除,那么可以找到15;然后将15去除,接着再判断能否被3整除和能否被5整除。
但如果先判断能否被3整除,那么找到了3,15;然后将15去除,接着再判断能否被15整除,会发现找不到15了
这两个案例的逻辑是一样的。
网友评论