Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでFizzBuzz問題を解く方法を初心者向けに解説

FizzBuzzは、プログラミング学習の定番問題として広く知られている古典的なアルゴリズム課題です。この記事では、Pythonを使ってFizzBuzz問題をどのように解けばよいのか、考え方から実装方法まで丁寧に解説します。

FizzBuzzのルールとは?

まず、数値 n が与えられたとします。1から n までのすべての数値を文字列として出力する必要がありますが、その際には以下の制約条件が適用されます。

  • 数値が3で割り切れる場合は、数値の代わりに「Fizz」と表示する
  • 数値が5で割り切れる場合は、数値の代わりに「Buzz」と表示する
  • 数値が3と5の両方で割り切れる(つまり15で割り切れる)場合は、数値の代わりに「FizzBuzz」と表示する

解き方の手順

この問題は、以下のステップで解決できます。

  • 1から n までの各数値について以下を判定します。
    • 3と5の両方で割り切れる場合 → 「FizzBuzz」を出力
    • 3のみで割り切れる場合 → 「Fizz」を出力
    • 5のみで割り切れる場合 → 「Buzz」を出力
    • いずれにも該当しない場合 → 数値をそのまま文字列として出力

ポイントは、「15で割り切れる場合(=3と5の両方)」の判定を最初に行うことです。もし先に3でのみ判定してしまうと、15のような両方の倍数が誤って「Fizz」として処理されてしまいます。条件分岐の順序が重要になるのが、この問題の学習ポイントの一つです。

Pythonによる実装例

それでは、実際のコードを見て理解を深めましょう。以下は、クラス形式で実装したサンプルコードです。

class Solution(object):
    def fizzBuzz(self, n):
        """
        :type n: int
        :rtype: List[str]
        """
        result = []
        for i in range(1, n + 1):
            if i % 3 == 0 and i % 5 == 0:
                result.append("FizzBuzz")
            elif i % 3 == 0:
                result.append("Fizz")
            elif i % 5 == 0:
                result.append("Buzz")
            else:
                result.append(str(i))
        return result

ob1 = Solution()
print(ob1.fizzBuzz(30))

このコードでは、range(1, n + 1) を使って1から n までの整数を順に走査し、剰余演算子 % によって割り切れるかどうかを判定しています。結果はリストに格納され、最後に返されます。数値を文字列に変換する際には str(i) を使用している点にも注目してください。

入力例

30

出力例

["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz",
"13", "14", "FizzBuzz", "16", "17", "Fizz", "19", "Buzz", "Fizz", "22", "23",
"Fizz", "Buzz", "26", "Fizz", "28", "29", "FizzBuzz"]

まとめ

FizzBuzzは一見シンプルな問題ですが、条件分岐の順序や剰余演算の扱いなど、プログラミングの基礎を確認できる優れた題材です。さらに応用として、リスト内包表記を使ったより簡潔な書き方や、文字列連結を活用した別解法にも挑戦してみると、Pythonの理解がさらに深まるでしょう。

  1. Pythonで整数の桁を逆順に反転する方法を解説

    問題の概要 32ビット符号付き整数が与えられ、その各桁を逆順に並べ替えることを考えます。たとえば、入力が425であれば出力は524となります。また、整数は符号を持つため、負の数にも対応する必要があります。入力が-425の場合は、-524が出力されます。 前提条件と制約 この問題では、扱う値は32ビット符号付き整数の範囲、すなわち-2147483648 ~ 2147483647(-231 ~ 231-1)に収まるものとします。もし反転後の結果がこの範囲を超えてオーバーフローする場合は、関数は0を返します。 解き方のアプローチ この問題はPythonを使うと非常にシンプルに解けます。基本的な流

  2. Pythonで階乗を計算する3つの方法|forループ・再帰・math.factorial()の使い方

    階乗(factorial)の計算は、データ分析をはじめとする数学的な処理において、Pythonでよく求められる操作の一つです。階乗とは、正の整数 n に対して、1から n までのすべての整数を掛け合わせた値のことです(例:5! = 1 × 2 × 3 × 4 × 5 = 120)。この記事では、Pythonで階乗を求める3つの方法を、コード例と実行結果とともにわかりやすく解説します。方法1:forループを使うforループで1から目的の数値まで順番に処理し、各ステップで掛け算を繰り返していく方法です。以下のプログラムでは、ユーザーに数値の入力を促し、ループ処理の前にint()で入力値を整数に変換