コメントいただいております通り、
訂正予定記事ですご注意くださいませ。
私の理解不足でございます。申し訳ございません。
#この記事でわかること
FizzBuzz問題をRubyで解く方法
Ruby以外での回答はないのでご注意下さい。
###前提
解答方法:Ruby、each文
#FizzBuzz問題の問題文
1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
###<ヒント>
問題を読んで何をしていいのか思いつかなかった人は先ずToDoリストができればオッケー
問題文を分かりやすく分解したもの
・3で割り切れる数値 を引数に渡すと、「Fizz」を返す。 ・5で割り切れる数値 を引数に渡すと、「Buzz」を返す。 ・3と5両方で割り切れる数値を引数に渡すと、「FizzBuzz」を返す。 さらに、 ・それ以外の数値は、数値を文字列にして返す。 ※これらを条件文に直していくことがポイントになる。>>[「if文についてに」戻る](https://qiita.com/kusaharajiji/items/eaca7b35b0ef07a5164f#if%E6%96%87%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
#解答コード
####each文での解答
(1..30).each do |i|
if i%15==0
puts "FizzBuzz!"
elsif i%3==0
puts "Fizz!"
elsif i%5==0
puts "Buzz!"
else
puts i
end
end
正直、私は初学者なので複数解答がある中でこれがRubyで一番分かりやすいのではないかと思う。
##解釈
####<ポイント>
- eachメソッド
- if文
- 1..30というソースコード。ピリオドを2つ連続で付ける(..)と、数字の範囲を指定することができる。
これらが理解できていると解けなくとも問題が分かってくる。
###eachメソッドについて
(1..30).each do |i|
//ここに処理を記述
end
「(1..30)」には繰り返したい範囲のものをかく。
iはiである理由は無いがeach do |i|からendの間で使える変数として命名されたもの他の文字でも良い。
今回の場合iは(1..30)の記述通り1から30の間の数字をいれる箱になっている。
each doなので1から30までの数字を繰り返しiに入れながら処理の部分を繰り返している。
今回は「//ここに処理を記述」の中にiという変数(箱)が使われる。
###if文について
if 条件文1
puts "出力したい文字列a"
elsif 条件文2
puts "出力したい文字列b"
elsif 条件文3
puts "出力したい文字列c"
else
puts each文で繰り返し処理されている数字iを出力
end
冒頭にあるヒントであげた3項目が条件になる。
また、条件をどの順番からif文の中に書いてくかも課題。
というのも「3と5両方で割り切れる数値(i%15==0)」という条件を先に記述せず、
条件の「3で割り切れる数値(i%3==0)」を先に持ってきてしまうと「3と5両方で割り切れる数値(i%15==0)」が意味の無いものになる。
条件文を実際に入れ替えて成立しない時の例は左の▶︎をクリック
#「3で割り切れる数値(i%3==0)」を先にし、引数iが30の時
(1..30).each do |i|
#条件1に30が当てはまるので puts "FizzBuzz!"が処理される。
if i%3==0
puts "FizzBuzz!"
#ここにも当てはまるが条件1で処理されてしまうので、この処理が行われることが無い。
elsif i%15==0
puts "Fizz!"
elsif i%5==0
puts "Buzz!"
else
puts i
end
end
条件の並びは十分に考えて、
実際に数字を入れて確認するのがベスト!
最後まで読んでくださって、ありがとうございます
そして、お疲れ様です✨
頭を使ったら甘いもの食べちゃいましょう!
ではまた
##参考リンク
[Ruby 2.3.1でFizzBuzz問題を解く。]
URL(https://qiita.com/Fendo181/items/425293e8e638d7fd7cea)