FizzBuzzとの3か月(2)
お世話になっております。
今日は、昨日あげた気になる点を直していこうと思います。まずはこちら。
「単体テストとしては難しい」とありますが、「もっと愚直なコードの方が単体テストとしてはふさわしいのではないか」というつもりです。
そこで、1から100まで地道に検査するコードへ変えてみました。
こういうコードは保守に手間がかかるので、本番のコードとしては使えません。今回は、課題は変わらないという前提のもとに、これをテスト用のコードとして採用します。
もう一つはこちら。
- range(start, stop)は個人的に分かりにくい。
昨日の自分は、まず1から100のリストを用意してからループさせたかったのでしょうが、それはベストではありません。
ちなみに、1から100のリストを作るなら、以下のように書くことができます。
numbers = [x + 1 for x in range(100)]
range()を使った普通のループに書き直しました。
最後にこちら。
- コメントが少ない。Pythonのドキュメンテーションを活用する。
簡単なものですが、Pythonのドキュメンテーション文字列を使用し、メソッドの説明を記載しました。
以下にコードを記載します。
# -*- coding: sjis -*- import unittest import random import sys class FizzBuzzTestCase(unittest.TestCase): def setUp(self): self._target = FizzBuzz() def testgetAnswer(self): """1から100までの数をプリントするプログラムを書け。 ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、 3と5両方の倍数の場合には「FizzBuzz」とプリントすること。 """ self.assertEqual('1', self._target.getAnswer(1)) self.assertEqual('2', self._target.getAnswer(2)) self.assertEqual('Fizz', self._target.getAnswer(3)) self.assertEqual('4', self._target.getAnswer(4)) self.assertEqual('Buzz', self._target.getAnswer(5)) self.assertEqual('Fizz', self._target.getAnswer(6)) self.assertEqual('7', self._target.getAnswer(7)) self.assertEqual('8', self._target.getAnswer(8)) self.assertEqual('Fizz', self._target.getAnswer(9)) self.assertEqual('Buzz', self._target.getAnswer(10)) self.assertEqual('11', self._target.getAnswer(11)) self.assertEqual('Fizz', self._target.getAnswer(12)) self.assertEqual('13', self._target.getAnswer(13)) self.assertEqual('14', self._target.getAnswer(14)) self.assertEqual('FizzBuzz', self._target.getAnswer(15)) self.assertEqual('16', self._target.getAnswer(16)) self.assertEqual('17', self._target.getAnswer(17)) self.assertEqual('Fizz', self._target.getAnswer(18)) self.assertEqual('19', self._target.getAnswer(19)) self.assertEqual('Buzz', self._target.getAnswer(20)) self.assertEqual('Fizz', self._target.getAnswer(21)) self.assertEqual('22', self._target.getAnswer(22)) self.assertEqual('23', self._target.getAnswer(23)) self.assertEqual('Fizz', self._target.getAnswer(24)) self.assertEqual('Buzz', self._target.getAnswer(25)) self.assertEqual('26', self._target.getAnswer(26)) self.assertEqual('Fizz', self._target.getAnswer(27)) self.assertEqual('28', self._target.getAnswer(28)) self.assertEqual('29', self._target.getAnswer(29)) self.assertEqual('FizzBuzz', self._target.getAnswer(30)) self.assertEqual('31', self._target.getAnswer(31)) self.assertEqual('32', self._target.getAnswer(32)) self.assertEqual('Fizz', self._target.getAnswer(33)) self.assertEqual('34', self._target.getAnswer(34)) self.assertEqual('Buzz', self._target.getAnswer(35)) self.assertEqual('Fizz', self._target.getAnswer(36)) self.assertEqual('37', self._target.getAnswer(37)) self.assertEqual('38', self._target.getAnswer(38)) self.assertEqual('Fizz', self._target.getAnswer(39)) self.assertEqual('Buzz', self._target.getAnswer(40)) self.assertEqual('41', self._target.getAnswer(41)) self.assertEqual('Fizz', self._target.getAnswer(42)) self.assertEqual('43', self._target.getAnswer(43)) self.assertEqual('44', self._target.getAnswer(44)) self.assertEqual('FizzBuzz', self._target.getAnswer(45)) self.assertEqual('46', self._target.getAnswer(46)) self.assertEqual('47', self._target.getAnswer(47)) self.assertEqual('Fizz', self._target.getAnswer(48)) self.assertEqual('49', self._target.getAnswer(49)) self.assertEqual('Buzz', self._target.getAnswer(50)) self.assertEqual('Fizz', self._target.getAnswer(51)) self.assertEqual('52', self._target.getAnswer(52)) self.assertEqual('53', self._target.getAnswer(53)) self.assertEqual('Fizz', self._target.getAnswer(54)) self.assertEqual('Buzz', self._target.getAnswer(55)) self.assertEqual('56', self._target.getAnswer(56)) self.assertEqual('Fizz', self._target.getAnswer(57)) self.assertEqual('58', self._target.getAnswer(58)) self.assertEqual('59', self._target.getAnswer(59)) self.assertEqual('FizzBuzz', self._target.getAnswer(60)) self.assertEqual('61', self._target.getAnswer(61)) self.assertEqual('62', self._target.getAnswer(62)) self.assertEqual('Fizz', self._target.getAnswer(63)) self.assertEqual('64', self._target.getAnswer(64)) self.assertEqual('Buzz', self._target.getAnswer(65)) self.assertEqual('Fizz', self._target.getAnswer(66)) self.assertEqual('67', self._target.getAnswer(67)) self.assertEqual('68', self._target.getAnswer(68)) self.assertEqual('Fizz', self._target.getAnswer(69)) self.assertEqual('Buzz', self._target.getAnswer(70)) self.assertEqual('71', self._target.getAnswer(71)) self.assertEqual('Fizz', self._target.getAnswer(72)) self.assertEqual('73', self._target.getAnswer(73)) self.assertEqual('74', self._target.getAnswer(74)) self.assertEqual('FizzBuzz', self._target.getAnswer(75)) self.assertEqual('76', self._target.getAnswer(76)) self.assertEqual('77', self._target.getAnswer(77)) self.assertEqual('Fizz', self._target.getAnswer(78)) self.assertEqual('79', self._target.getAnswer(79)) self.assertEqual('Buzz', self._target.getAnswer(80)) self.assertEqual('Fizz', self._target.getAnswer(81)) self.assertEqual('82', self._target.getAnswer(82)) self.assertEqual('83', self._target.getAnswer(83)) self.assertEqual('Fizz', self._target.getAnswer(84)) self.assertEqual('Buzz', self._target.getAnswer(85)) self.assertEqual('86', self._target.getAnswer(86)) self.assertEqual('Fizz', self._target.getAnswer(87)) self.assertEqual('88', self._target.getAnswer(88)) self.assertEqual('89', self._target.getAnswer(89)) self.assertEqual('FizzBuzz', self._target.getAnswer(90)) self.assertEqual('91', self._target.getAnswer(91)) self.assertEqual('92', self._target.getAnswer(92)) self.assertEqual('Fizz', self._target.getAnswer(93)) self.assertEqual('94', self._target.getAnswer(94)) self.assertEqual('Buzz', self._target.getAnswer(95)) self.assertEqual('Fizz', self._target.getAnswer(96)) self.assertEqual('97', self._target.getAnswer(97)) self.assertEqual('98', self._target.getAnswer(98)) self.assertEqual('Fizz', self._target.getAnswer(99)) self.assertEqual('Buzz', self._target.getAnswer(100)) class FizzBuzz(object): def getAnswer(self, num): """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): """1から100をパラメータとしてgetAnswerを実行し、復帰値を出力する""" for i in range(100): param = i + 1 print(self.getAnswer(param)) if __name__ == '__main__': unittest.main()
これでテストコードが書けましたので、明日からは本番のコードを改造していこうと思います。
以上