- <目次>
- 簡易3目並べ(oxゲーム)シミュレータ tic_tac_toe.py を読んでみよう。
- まずは上記ファイル(tic_tac_toe.py)を作業ディレクトリにダウンロードせよ。
- 下記コマンド(長いですが1行です)をターミナルで実行することでダウンロード可能。
- まずは上記ファイル(tic_tac_toe.py)を作業ディレクトリにダウンロードせよ。
curl -O https://raw.githubusercontent.com/naltoma/python_intro/master/report/tic_tac_toe.py
- 達成目標
- 他人が書いたコードを読んでみよう。
- 実行するなという意味ではありません。むしろ積極的に実行やデバッグ実行も交えて読み解いてください。関数単位での実行や、関数の中身を部分的に切り出して実行してみるなど、「良くわからない部分があった場合、その処理の流れや処理対象の中身をどうやれば確認できるか」を考えつつ、試してみよう。
- 160行程ですが、大半はコメント行(docstring)とユニットテスト(doctest)です。実質的なコードは50行程度。
- 変数名、関数名、コメントの大切さに気付こう。
- 実装対象(3目並べ)において表現する必要がある状態、例えば「中央に○を書いた状態」をどのように表現しようとしているのかを読み取ろう。
- 実行方法の違いに伴う結果の差異を理解しよう。
- docstringによるコメントの書き方の参考にしよう。
- ファイル全体のコメント、関数のコメントをどのように書いてるだろうか?
- 他人が書いたコードを読んでみよう。
- ペアや友人らと話し合って取り組んで構わないが、自分自身の言葉で述べること。試して分かったこと、自身で解決できなかった部分等についてどう取り組んだか、といった過程がわかるように示すこと。(考えを図表や文章を駆使して表現して報告する練習です)
- レポート作成は当面「googleドキュメント」を使うこと。
- レポートには下記を含めること。
- タイトル
- 今回は【プログラミング1、レポート課題6: 「コード読解」】。
- 提出日: yyyy-mm-dd
- 報告者: 学籍番号、氏名
- 複数人で相談しながらやった場合、相談者らを「協力者: 学籍番号、氏名」として示そう。
- 課題説明
- 1,2行程度で課題の内容を説明しよう。
- 書いたコード
- 実行結果
- 考察
- 課題への取り組みを通し、課題の意義、課題から分かったこと、今後の展望などを述べる。失敗やつまづきがあれば、それらについての失敗分析を含めること。
- 参考リンク: 実験レポートの書き方
- その他
- 通常は感想等をレポートには含めませんが、練習なので課題に取り組みながら何か感じたこと、悩んでいること等、書きたいことがあれば自由に書いてください。(なければ省略OK)
- タイトル
以下に示す4点について取り組み、レポートとしてまとめよ。なお、5番目の課題は余裕がある人向けのオマケ課題です。やってみたい人はどうぞ。
- 1. docstringドキュメントの外観
- docstringで記述されたドキュメントを help() もしくは pydoc により読み、「スクリプトファイルのどの部分が、help/pydocにおいてどのように出力されているか」について気づいた点について報告せよ。
- ここではドキュメントの内容は詳細に読む必要はない。docstringの機能について気づいた点を報告してください(数行程度でok)。
- 2. doctestの実行
- doctestで記述されたユニットテストを実行し、テスト結果を報告せよ。レポートには以下の項目を報告すること。
- (1)実行されたテスト数。
- (2)テストが成功した数。
- (3)テストが失敗した数。
- (4)テストが失敗した関数名。(複数ある場合には複数列挙すること)
- doctestで記述されたユニットテストを実行し、テスト結果を報告せよ。レポートには以下の項目を報告すること。
- 3. ドキュメント詳細読み
- コードやdocstringドキュメントを読み、def宣言されている全関数(5個)の機能について概説(数行程度でOK)せよ。また、コードやドキュメントで気になる部分があれば、その部分について言及せよ。
- 補足
- 読んで理解することが趣旨ですが、実行するなという意味ではありません。積極的に実行やデバッグ実行も交えて読み解いてください。関数単位での実行や、関数の中身を部分的に切り出して実行してみるなど、動作確認方法を考えつつ試してみよう。
- 4. テスト失敗箇所の要因分析+コード修正
- テストコードと実コードとを見比べ、テストが失敗している原因を分析せよ。その分析結果を元にテストが通るように実コードを修正せよ。なお、doctestは正しいものとする(doctest自体を修正してはならない)。
- レポートには少なくとも、(1)テストが失敗している原因、(2)コードの修正箇所、の2点について報告すること。また、(2)については下記の手順で報告すること。
- (2)の修正箇所を報告する手順。
- Step 1: 修正を始める前に、オリジナルのファイルを「orig.py」というファイル名で複製して残す。(もし既に修正してしまったのであれば、もう一度オリジナルのファイルをダウンロードし直そう。上書きされないように注意)
- Step 2: 「tic_tac_toe.py」を編集してテストが通るように修正する。
- Step 3: テストが通ったら、シェル上で「diff orig.py tic_tac_toe.py」を実行せよ。この結果をレポートに掲載すること。(diffコマンドは2つのファイルの差分を確認するためのコマンドです)
- (2)の修正箇所を報告する手順。
- 5. (余裕がある人向け)ゲーム終了判定
- 現時点でのコードにはゲーム終了判定をする部分がない。完全でなくてもかまわないので、終了判定する関数を書いてみよう。
- 例えば、「1行だけを判定する関数」、「1列だけを判定する関数」のように、部分的な判定をしてみると良いでしょう。
- docstringによる解説や、doctestによるユニットテストも書いてみよう。
- 現時点でのコードにはゲーム終了判定をする部分がない。完全でなくてもかまわないので、終了判定する関数を書いてみよう。
- 提出物は「レポート」、「修正済みスクリプトファイル」の2点である。
- もしそれ以外に作成したものがあるなら、それも提出しよう。
- レポートは電子ファイルで提出するものとする。
- 提出先&〆切: 授業ページを参照。