FizzBuzz in Python

遅まきながらPythonで参加。世間ではショートコードで、OOで、色々な言語で、バカなコードで、短時間でなど色々な発想で解かれていると思うが、私の場合、以下の記事を基にPythonらしく、分かりやすい保守性の良い(改良しやすい)方法で解いてみる。探せば既にありそうだが、一応自分用のメモとして記述。

>>> def fizzBuzz(n):    # FizzBuzz値を取得する関数
...     if n%15==0: s='FizzBuzz'
...     elif n%3==0: s='Fizz'
...     elif n%5==0: s='Buzz'
...     else: s=str(n)
...     return s
...
>>> print ' '.join([fizzBuzz(n) for n in range(1,101)])    # FizzBuzzのリスト作成と表示
1 2 Fizz 4 Buzz Fizz 7 ...(以下略)

ポイントは、fizzBuzz値を取得する関数を独立させたことで、この部分に業務ロジックがまとまって、仕様が変更になった場合でも恐らくこの部分のみを変更すればOK。


ポイントとしては、以下の2つ。

  • 表示とデータが分離できている
  • データ作成時にシーケンスデータの構成要素を1つずつ取得できるようにしている


1つ目によりデータを関数の引数に渡すこともできるし(実際joinに渡している)、2つ目によりfizzBuzz関数の単体テストを可能にしている。分かりやすい保守性のしやすいコードと言える。