👻

PythonでFizzBuzz問題を解いてみよう

2024/11/06に公開

はじめに

こんにちは!今回はプログラミングの基本中の基本である「FizzBuzz問題」をPythonで解いてみたいと思います。
FizzBuzz問題は、簡単ながらも様々な解法があるため、初心者から上級者まで楽しめる問題です。

FizzBuzz問題とは?

1から100までの数字を順に表示するプログラムを作成します。ただし、次の条件を満たす場合には数字の代わりに特定の単語を表示します:

  • 数字が3で割り切れる場合は「Fizz」
  • 数字が5で割り切れる場合は「Buzz」
  • 数字が3でも5でも割り切れる場合は「FizzBuzz」

では、さっそく基本的な解答例から見ていきましょう。

基本的な解答例

まずはシンプルな解答です。

for i in range(1, 101):
    if i % 3 == 0 and i % 5 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)

このコードは、条件に従って適切な文字列を出力します。

結果

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
・・・

条件分岐を1行で書く

次に、条件分岐を1行で書く方法を見てみましょう。三項条件演算子(Pythonでは三項条件式)を使います。

for i in range(1, 101):
    print("FizzBuzz" if i % 3 == 0 and i % 5 == 0 else "Fizz" if i % 3 == 0 else "Buzz" if i % 5 == 0 else i)

このコードでは、if文を使わずに1行でFizzBuzzの条件分岐を実現しています。

条件分岐を禁止

次に、条件分岐を使わずにFizzBuzz問題を解く方法です。文字列の結合を利用します。

for i in range(1, 101):
    output = ""
    output += "Fizz" * (i % 3 == 0)
    output += "Buzz" * (i % 5 == 0)
    print(output or i)

このコードでは、outputという文字列を初期化し、iが3で割り切れる場合には"Fizz"を、5で割り切れる場合には"Buzz"を追加しています。どちらにも当てはまらない場合にはoutputが空文字になるので、その場合には数字を出力します。

剰余を禁止

最後に、剰余を使わずにFizzBuzz問題を解く方法です。ループカウンタと別のカウンタを使って割り切れるかどうかを判定します。

コードをコピーする
fizz_count = 0
buzz_count = 0

for i in range(1, 101):
    fizz_count += 1
    buzz_count += 1

    output = ""
    
    if fizz_count == 3:
        output += "Fizz"
        fizz_count = 0
    if buzz_count == 5:
        output += "Buzz"
        buzz_count = 0

    print(output or i)

このコードでは、fizz_countとbuzz_countというカウンタを使って3の倍数と5の倍数を判定しています。
fizz_countが3になったら"Fizz"を、buzz_countが5になったら"Buzz"を追加し、それぞれのカウンタをリセットします。いずれのカウンタもリセットされない場合は数字を出力します。

まとめ

FizzBuzz問題は、プログラミングの基本的なロジックを学ぶのに最適な問題です。
様々な制約条件を追加することで、同じ問題でも異なるアプローチを試すことができます。是非、自分なりのFizzBuzz解法に挑戦してみてください!

楽しんでいただけたなら、いいねやコメントをいただけると嬉しいです!

Discussion