LoginSignup
2
1

More than 1 year has passed since last update.

FizzBuzz問題

Posted at

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問題やってみるのも面白いかなと思ってます。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1