ステージ1: FizzBuzz with docstring + doctest (情報工学実験 3 : データマイニング班)
目次- 想定環境
- OS: Mac OS X 10.8.x (10.7.x以降であれば同じ方法で問題無いはず)
- Python: 2.7.x
- Mercurial: 2.2
- FizzBuzz
- 仕様その1
- ファイル名: fizzbuzz.py, クラス名: FizzBuzz, 関数名: fizzbuzz
- fizzbuzz()は1から順番に数を数え上げる関数であり、数の終端を引数として与えるものとする。
- 数え上げた数が3で割り切れるなら「Fizz」、5で割り切れるなら「Buzz」、両方で割り切れるなら「FizzBuzz」に変更して出力する。
- fizzbuzz()は、数え上げた結果をリストとして戻す。
# インタプリタ上での実行イメージ >>> import fizzbuzz >>> fb = fizzbuzz.FizzBuzz() >>> fb.fizzbuzz(16) >>> [1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz', 11, 'Fizz', 13, 14, 'FizzBuzz', 16]
# コマンドラインからの実行イメージ prompt> python fizzbuzz.py [1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz', 11, 'Fizz', 13, 14, 'FizzBuzz', 16]
- コード例: fizzbuzz1.py (実験終了後にアップロード予定)
- docstringによるコメント記述。
- fizzbuzz.py ファイルに対するコメント(ファイル概説) 。
- FizzBuzz クラスに関数するコメント。
- fizzbuzz 関数に関するコメント。
- インタプリタ上での help() によるドキュメント参照。
>>> import fizzbuzz >>> help(fizzbuzz)
- pydocによるドキュメント参照、HTML出力。
prompt> pydoc fizzbuzz prompt> pydoc -w fizzbuzz prompt> emacs fizzbuzz.html ===== 編集内容ここから ===== # デフォルトのままだと文字化けするので、<head>〜</head>に以下を追加。 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> ===== 編集内容ここまで ===== prompt> open fizzbuzz.html 出力例
- コード例: fizzbuzz2.py (実験終了後にアップロード予定)
- doctestを使ってユニットテスト
- fizzbuzz() 関数の動作確認を、docstring 中に「インタプリタでの実行例(読めるテスト)」として記述。
- doctest でテストするための記述を追加。
# fizzbuzz.py モジュール全体の docstring を対象とするなら、 # モジュール最後に以下を記述。 prompt> emacs fizzbuzz.py ===== 編集内容ここから ===== if __name__ == "__main__": import doctest doctest.testmod() ===== 編集内容ここまで =====
- 「読めるテスト」を用いて、書かれている通りに振る舞うかをテスト。
prompt> python fizzbuzz.py -v 出力例
- コード例: fizzbuzz3.py (実験終了後にアップロード予定)
- 仕様その2: 以下のようにfizzbuzz()を変更し、各々ユニットテストにより動作を確認せよ。
- fizzbuzz(n) を fizzbuzz(start, end) として2入力読み込むように変更せよ。startは数え上げる最初の数字、endは最後の数字とする。
- fizzbuzz(start, end) を fizzbuzz(start, end, str1="Fizz", str2="Buzz") として最大4入力読み込むように変更せよ。str1とstr2はそれぞれFizzとBuzzをデフォルト値とし、必要に応じて別の文字列に変更するための引数とする。
- 仕様その1
- (省略) unittestを使ったユニットテスト。