FizzBuzz問題とは
1から順に数を数え上げていき、3の倍数なら「Fizz」、5の倍数なら「Buzz」、両方の倍数(15の倍数)なら「Fizz Buzz」、いずれでもなければその数を言うゲームです。
元々は海外の言葉遊びでそのルールをプログラムに実装したものです。
プログラミングの初歩的な問題で扱われることが多いですが、使える予約語や演算子、関数やオブジェクトが制限されると、とたんに難易度が上がります。
まずコードを見てみましょう。
環境
macOS Ventura 13.0.1
Google Colaboratory
コード
for num in range (1, 101):
if num % ( 3*5 ) ==0:
print ("Fizz Buzz")
elif num % 3 == 0:
print ("Fizz ")
elif num % 5 ==0:
print ("Buzz")
else:
print(num)
上記のコードを実装すると下記の結果が得られます。
(実際に100まで並べると長くなるので一部カットしてます。)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz Buzz
16
17
Fizz
19
Buzz
Fizz
22
.
.
.
.
.
88
89
Fizz Buzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz
コードの中身ですが、
for num in range (1, 101):
numが1から100までの間で、
if num % ( 3*5 ) ==0:
print ("FIZZ BUZZ")
もしnumが15(3*5)で割り切れるなら、
"Fizz Buzz"と出力。
elif num % 3 == 0:
print ("Fizz ")
もしnumが3で割り切れるなら、
"Fizz"と出力。
elif num % 5 ==0:
print ("Buzz")
もしnumが5で割り切れるなら、
"Buzz"と出力。
else:
print(num)
それ以外の場合は数字を出力。
一つ一つのコードは難しくないと思います。
今回のポイントは、if文の中の順番です。
この順番を入れ替えてコードを書いてみると期待通りの答えが得られません。
試しに下記のコードを実装してみます。
for num in range (1, 101):
if num % 3 ==0:
print ("Fizz")
elif num % 5 == 0:
print ("Buzz")
elif num % (3*5) ==0:
print ("Fizz Buzz")
else:
print(num)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz
16
17
Fizz
19
Buzz
Fizz
22
.
.
.
.
.
88
89
Fizz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz
結果を見てもらえると分かりますが、
まず15のところで"Fizz Buzz"が表示されずに"Fizz"が表示されているのが分かります。
これはプログラムのコードは上から順に読み込まれるためです。
まとめ
今回はFizzBuzz問題をやってみました。
今後は他の言語でFizzBuzz問題やってみるのも面白いかなと思ってます。