FizzBuzz in Python
遅まきながらPythonで参加。世間ではショートコードで、OOで、色々な言語で、バカなコードで、短時間でなど色々な発想で解かれていると思うが、私の場合、以下の記事を基にPythonらしく、分かりやすい保守性の良い(改良しやすい)方法で解いてみる。探せば既にありそうだが、一応自分用のメモとして記述。
- yojikのブログロ http://d.hatena.ne.jp/yojik/20070528
- 矢野勉のはてな日記 http://d.hatena.ne.jp/t_yano/20070528
>>> 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関数の単体テストを可能にしている。分かりやすい保守性のしやすいコードと言える。