FizzBuzz(フィズバズ)問題は、プログラミングの基礎を学ぶ上で非常に有名な問題です。初心者向けのコーディング課題として広く知られており、アルゴリズムの基本的な考え方や条件分岐の使い方を学ぶのに適しています。本記事では、FizzBuzz問題をPythonで解く方法を詳しく説明します。
FizzBuzz問題とは?
FizzBuzz問題のルールは以下の通りです。
・1から指定した数(例えば100)までの数を順番に出力する。 ・その数が3で割り切れる場合は「Fizz」と出力する。 ・その数が5で割り切れる場合は「Buzz」と出力する。 ・その数が3と5の両方で割り切れる場合は「FizzBuzz」と出力する。 ・それ以外の場合はそのまま数値を出力する。
このシンプルなルールに基づいて、Pythonで実装していきます。
基本的なFizzBuzzの実装
まずは、基本的な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行目:range(1, 101) により、1から100までの整数を順番に取得。
2行目:if i % 3 == 0 and i % 5 == 0: で3と5の両方で割り切れる場合に「FizzBuzz」を出力。
4行目:elif i % 3 == 0: で3で割り切れる場合に「Fizz」を出力。
6行目:elif i % 5 == 0: で5で割り切れる場合に「Buzz」を出力。
8行目:それ以外はそのまま数値を出力。
このコードを実行すると、以下のような出力が得られます。
関数を使ったFizzBuzz
FizzBuzzのコードを関数として定義すると、再利用しやすくなります。
def fizzbuzz(n):
for i in range(1, n + 1):
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)
# 関数を呼び出して100までのFizzBuzzを実行
fizzbuzz(100)
関数化することで、異なる範囲(例えば1から50までなど)にも簡単に対応できます。
リスト内包表記を使ったFizzBuzz
Pythonのリスト内包表記を使ってFizzBuzzを簡潔に記述することも可能です。
print("\n".join(["FizzBuzz" if i % 3 == 0 and i % 5 == 0 else "Fizz" if i % 3 == 0 else "Buzz" if i % 5 == 0 else str(i) for i in range(1, 101)]))
このコードは、リストを作成し、改行で結合して一括で出力しています。
lambda関数とmapを使ったFizzBuzz
Pythonのmap関数とlambdaを活用すると、さらに関数型プログラミングのスタイルでFizzBuzzを記述できます。
fizzbuzz_list = map(lambda i: "FizzBuzz" if i % 3 == 0 and i % 5 == 0 else "Fizz" if i % 3 == 0 else "Buzz" if i % 5 == 0 else str(i), range(1, 101))
print("\n".join(fizzbuzz_list))
クラスを使ったFizzBuzz
FizzBuzzをクラスとして実装すると、よりオブジェクト指向的なアプローチになります。
class FizzBuzz:
def __init__(self, n):
self.n = n
def run(self):
for i in range(1, self.n + 1):
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)
# インスタンスを作成し、FizzBuzzを実行
fb = FizzBuzz(100)
fb.run()
まとめ
FizzBuzzはシンプルな問題ですが、さまざまな方法で解くことができます。
・基本のループと条件分岐を使った解法
・関数を使った解法
・リスト内包表記やmap関数を活用した解法
・クラスを使ったオブジェクト指向的な解法
FizzBuzzは初心者がPythonの基礎を学ぶのに最適な課題です。ぜひ試してみてください!