元のページ

ステージ1: FizzBuzz with docstring + doctest (情報工学実験 3 : データマイニング班)

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

参考サイト一覧