Python

【Python】プログラミング試験頻出のFizzBuzz問題を解説!


FizzBuzz問題はプログラミングテストの定番問題の一つです。

就職活動などでプログラミングの試験を受験する機会がある人は必ずチェックしておくべきだと思います。この記事で詳しく解説しているので、是非御覧下さい。

そもそもFizzBuzz問題とは?

まずはFizzBuzz問題の概要について簡単に説明します。

どのような問題なのか?

FizzBuzz問題は以下のような問題です。

1~Nまでの整数を順に出力しなさい。ただし、例外として以下のルールを守ること。

・3で割り切れる数字の場合はFizzを出力
・5で割り切れる数字の場合はBuzzを出力
・15で割り切れる数字の場合はFizzBuzzを出力

例)1~15の場合
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz

受験者は上記処理を行うプログラムを作成し、提出することになります。評価のポイントは適切に処理が行えていることに加え、プログラムの簡潔さなども含まれます。

何を目的とした問題なのか?

FizzBuzz問題はコードが書けないプログラマ志願者を見分けるために作られた問題です。

上記処理はプログラミングの基本である「条件分岐」と「繰り返し処理」を理解していれば簡単に実装することができます。

逆に言えばプログラミングの基本を理解していない人には実装できない処理ということです。

どのような場面で出題されるのか?

FizzBuzz問題はIT企業の就職試験などで出題される傾向があります。僕が就職活動をしていた時もプログラミングテストとしてFizzBuzz問題を出題されることが何度もありました。

IT業界志望の方はFizzBuzz問題への対策を必ずしておくべきです。

実際にプログラムを作成してみよう

それでは実際にFizzBuzz問題の処理を行うプログラムを作成してみます。

プログラム作成の手順

ここでは、以下の手順で処理を実装します。

  1. 処理の実行回数を設定する
  2. 出題されたルールに基づいて数字又は文字列を出力する
  3. 2の処理を1で設定した回数分繰り返す

実装例

上記の手順に従ってプログラムを作成します。使用する言語はPythonです。

if __name__ == '__main__':

    N = 15  # 実行する処理の回数を指定

    for i in range(1, N+1):  # N回分以下の処理を繰り返す

        if i%3==0 and i%5==0:  # 15で割り切れる(3と5で割り切れる)場合
            print('FizzBuzz')
        elif i%3==0:           # 3で割り切れる場合
            print('Fizz')
        elif i%5==0:           # 5で割り切れる場合
            print('Buzz')
        else:                  # それ以外
            print(i)

このプログラムを実行すると以下の出力結果が得られます。

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz

特に問題も無く、適切に処理が実行できています。実際のプログラミング試験でもこれくらいのプログラムで及第点は取れるはずです。

応用問題への対策もしておこう

FizzBuzz問題の内容やその解き方については説明した通りですが、試験によっては問題の内容が少し変化した応用問題が出題されることもあります。

ありがちなケースとしては「整数nで割り切れる場合は文字列Xを出力する」パターンが追加されるなどです。

その場合、先程紹介したようなプログラムの書き方ではif文の数が次々増えてしまうため、他の書き方についても紹介します。

プログラム作成の手順

ここでは、以下の手順で処理を実装します。

  1. 処理の実行回数を設定する
  2. 空のchar型変数valを一つ用意する
  3. 出題されたルールに基づいて変数valに文字列を追加する
  4. 変数valに格納された文字列を出力する
  5. 2~4の処理を1で設定した回数分繰り返す

※「7で割り切れる場合はJazzを出力」というルールを追加してプログラムを作成します。

実装例

上記の手順に従ってプログラムを作成します。使用する言語はPythonです。

if __name__ == '__main__':

    N = 15  # 実行する処理の回数を指定

    for i in range(1, N+1):  # N回分以下の処理を繰り返す

        val = ''  # 空の文字列を生成

        if i%3==0:         # 3で割り切れる場合
            val += 'Fizz'
        if i%5==0:         # 5で割り切れる場合
            val += 'Buzz'
        if i%7==0:         # 7で割り切れる場合
            val += 'Jazz'
        if val=='':        # それ以外
            val += str(i)

        print(val)         # 最後に文字列を出力

このプログラムを実行すると以下の出力結果が得られます。

1
2
Fizz
4
Buzz
Fizz
Jazz
8
Fizz
Buzz
11
Fizz
13
Jazz
FizzBuzz

適切に処理が実行できています。この書き方であれば、更に文字列出力のルールが追加されてもその分のif文を一つ増やすだけで済みます。

プログラムの見た目も簡潔になるため、通常のFizzBuzz問題を解く場合でもこの書き方を推奨します。