FizzBuzzとの3か月(6)
お世話になっております。
今日はテストコードを直しました。
最初のコードとほとんど同じです。違うのは分岐の条件のみです。
以下、コードです。
# -*- coding: sjis -*- import unittest import random import sys class FizzBuzzFactoryTestCase(unittest.TestCase): def setUp(self): self._target = FizzBuzzFactory() def testgetAnswer(self): """1から100までの数をプリントするプログラムを書け。 ただし3の倍数のときは数の代わりに「Fizz」と、7の倍数のときは「Buzz」とプリントし、 3と7両方の倍数の場合には「FizzBuzz」とプリントすること。 """ for i in range(100): param = i + 1 answer = self._target.getAnswer(param) if 'Fizz' == answer: self.assertEqual(0, param % 3) elif 'Buzz' == answer: self.assertEqual(0, param % 7) elif 'FizzBuzz' == answer: self.assertEqual(0, param % 3) self.assertEqual(0, param % 7) else: self.assertEqual(False, param % 3 == 0) self.assertEqual(False, param % 7 == 0) class FizzBuzzFactory(object): def __init__(self): self._fizzbuzzList = [Fizz(), Buzz(), FizzBuzz(), Figure()] def getAnswer(self, num): """numに対応した文字列を返す。""" result = None for fizzbuzz in self._fizzbuzzList: if fizzbuzz.isAnswerOf(num): result = fizzbuzz break return str(result) def execute(self): """1から100をパラメータとしてgetAnswerを実行し、復帰値を出力する""" for i in range(100): param = i + 1 print(self.getAnswer(param)) class Fizz(object): def __str__(self): return 'Fizz' def isAnswerOf(self, num): return num % 3 == 0 and not FizzBuzz().isAnswerOf(num) class Buzz(object): def __str__(self): return 'Buzz' def isAnswerOf(self, num): return num % 7 == 0 and not FizzBuzz().isAnswerOf(num) class FizzBuzz(object): def __str__(self): return 'FizzBuzz' def isAnswerOf(self, num): return num % 3 == 0 and num % 7 == 0 class Figure(object): def __str__(self): if not self._num: raise Exception return str(self._num) def isAnswerOf(self, num): if not Fizz().isAnswerOf(num) and not Buzz().isAnswerOf(num): self._num = num return True return False if __name__ == '__main__': unittest.main()
明日は休みで時間がありますので、別の言語で実装してみようかと思います。
以上