Fizz_Buzz問題
問題文
1〜100までの数字をターミナルに出力してください。ただし、「3の倍数」のときは数字の代わりに文字列でFizzと、「5の倍数」のときはBuzz、両方の倍数である「15の倍数」のときはFizzBuzzと出力してください。
ひな形は以下です。
def fizz_buzz
# ここに処理を書き加えてください
end
fizz_buzz
解くまでの流れ
[とりあえず問題文を最後まで読む]→[情報を分けて考えてみる]→[情報とヒントを元にコードを書く]→[組み合わせて実行]→[実行結果から修正を加える]
1.とりあえず問題文を最後まで読む
文を最後まで読んでみるものの、あまり分からない。特に「1〜100までの数字をターミナルに出力してください。」や「倍数の条件式」に引っかかる。
2.情報を分けて考えてみる
全体を読んでも理解できなかったので分けて考えてみることにした。「1〜100までの数字をターミナルに出力してください。」の文では繰り返しの処理で最後に1ずつ足していけばいいと分かった。倍数の条件式では考えてもピンと来る式を思いつかなかった。
3.情報とヒントを元にコードを書く
ヒントの繰り返し処理while
と
while num <= 100 do
num += 1
end
倍数の条件式
if num % 3 == 0
puts "Fizz"
elsif num % 5 == 0
puts "Buzz"
elsif num % 3 == 0 && num % 5 == 0
puts "FizzBuzz"
else
puts num
end
4.組み合わせて実行
完成したプログラム
def fizz_Buzz
num = 1
while num <= 100 do
if num % 3 == 0
puts "Fizz"
elsif num % 5 == 0
puts "Buzz"
elsif num % 3 == 0 && num % 5 == 0
puts "FizzBuzz"
else
puts num
end
num += 1
end
end
fizz_Buzz
コンソール
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
Fizz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
Fizz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
Fizz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
Fizz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
Fizz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz
5.実行結果から修正を加える
問題点、条件分岐を小さい数字から3の倍数、5の倍数、15の倍数の順に書いている。これでは15の倍数の時に3の倍数である”Fizz”が出力されてしまう。だから先に15の倍数を条件分岐を始めに持ってくる。
【修正後プログラム】
def fizz_Buzz
num = 1
while num <= 100 do
if num % 3 == 0 && num % 5 == 0
puts "FizzBuzz"
elsif num % 3 == 0
puts "Fizz"
elsif num % 5 == 0
puts "Buzz"
else
puts num
end
num += 1
end
end
fizz_Buzz
【コンソール】
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz
解答は以上になります