Help us understand the problem. What is going on with this article?

FizzBuzz問題(Ruby)(「each文」編)

:pray_tone1:コメントいただいております通り、
訂正予定記事ですご注意くださいませ。
私の理解不足でございます。申し訳ございません。

この記事でわかること

FizzBuzz問題をRubyで解く方法
:thinking:Ruby以外での回答はないのでご注意下さい。

前提

解答方法:Ruby、each文

  

FizzBuzz問題の問題文

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

<ヒント>

:speaking_head:問題を読んで何をしていいのか思いつかなかった人は先ずToDoリストができればオッケー

問題文を分かりやすく分解したもの
・3で割り切れる数値    を引数に渡すと、「Fizz」を返す。
・5で割り切れる数値    を引数に渡すと、「Buzz」を返す。
・3と5両方で割り切れる数値を引数に渡すと、「FizzBuzz」を返す。
さらに、
・それ以外の数値は、数値を文字列にして返す。
 ※これらを条件文に直していくことがポイントになる。>>「if文についてに」戻る

  
  
  

  

解答コード

each文での解答

Ruby
(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メソッドについて

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文
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

条件の並びは十分に考えて、
実際に数字を入れて確認するのがベスト!


  
  
  

ひとことMemo

正直、初見は問題みて分からなかった。
でも、繰り返しやってみたりこうして自分で解説してみると理解しやすい。
初学者からすれば不明点が重なるので余計に挫折してしまう。
もっと解説できるところを増やして編集するので懲りずに記事を読んでやってほしい。
特に問題の場合使用できる言語がRubyだけではなくで他にもある。
ということは解答は複数ある。
また、Rubyだけでも複数ある。
今回みたいにeach文ではなくfor文での解答もあるようだ。
それもまた勉強して記事にしたい。
  
  

最後まで読んでくださって、ありがとうございます:blush:
そして、お疲れ様です✨
頭を使ったら甘いもの食べちゃいましょう!
ではまた:yum:

参考リンク

[Ruby 2.3.1でFizzBuzz問題を解く。]
URL(https://qiita.com/Fendo181/items/425293e8e638d7fd7cea)
  
  

kusaharajiji
プログラミング初学者。 分からないことが分からない。初めは分からなくて当然!分からないから知りたい!! ということで、調べて調べて記事を書いています。なるべく、自分だけわかる記事ではなく初学者目線で詳しく。 過去の自分に伝えるように書く。アウトプット大事です。先輩後輩の方々。全ての方々仲良くして下さい。
https://github.com/JijiKusahara
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした