FizzBuzzとの3か月(1)

お世話になっております。

@ITにて、以下のような記事を見つけました。
小飼弾「転職活動する暇があったらブログを書け」
(http://jibun.atmarkit.co.jp/ljibun01/cs/200909/02/01.html)

この記事では、ITエンジニアを目指すならブログを活用するように勧めています。
記事の最後には、「弾言します。3カ月間ブログをきちんと書き続けられるITエンジニアが、職にあぶれることはない、と。」とあります。
私も職にあぶれるのは嫌なので、3ヶ月間ブログをきちんと更新してみることにしました。
その際の「ネタ」も上記の記事から拝借することにしました。それが「FizzBuzz」です。
「SE4年目でFizzBuzzってどうなのよ」というご意見もあるかと思いますが、退屈しないよう、色々工夫したいと考えています。

さて、第一回目は私の遊び相手である、Pythonで実装してみたいと思います。
ただPythonで実装しても面白くありませんので、unittestモジュールを使用したテストファーストで実装してみました。
こういう便利なモジュールが標準で付属しているのもPythonの魅力の一つです。
では、コードをご覧ください。

# -*- coding: sjis -*-

import unittest
import random
import sys


class FizzBuzzTestCase(unittest.TestCase):
  def setUp(self):
    self._target = FizzBuzz()
    self._seq = range(1, 100)

  def testgetAnswer(self):
    for i in range(50):
      num = random.choice(self._seq)
      answer = self._target.getAnswer(num)
      if num % 3 == 0 and num % 5 == 0:
        #  3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
        self.assertEqual("FizzBuzz", answer)
      elif num % 3 == 0:
        #  ただし3の倍数のときは数の代わりに「Fizz」と、
        self.assertEqual("Fizz", answer)
      elif num % 5 == 0:
        #  5の倍数のときは「Buzz」とプリントし、
        self.assertEqual("Buzz", answer)
      else:
        #  1から100までの数をプリントする
        self.assertEqual(str(num), answer)


class FizzBuzz(object):
  def getAnswer(self, num):
    if num % 3 == 0 and num % 5 == 0:
      return "FizzBuzz"
    elif num % 3 == 0:
      return "Fizz"
    elif num % 5 == 0:
      return "Buzz"
    else:
      return str(num)

  def execute(self):
    for i in range(1, 101):
      print(self.getAnswer(i))


if __name__ == '__main__':
  unittest.main()

上記のコードの気になる点を記載します。

明日以降修正していこうと思います。

以上

追記

同じ日に同じネタで書いていらっしゃる記事(http://d.hatena.ne.jp/ys0000/20090927/1254021762)を発見。これも何かの縁でしょうか。