では、「Pythonコメントの書き方・docstring・TODO活用」をテーマにした
全50問の練習問題集(自動採点用コード付き) を作ります。
構成
- レベル1(基礎):Q1〜Q15 — コメント文の書き方と使い方
- レベル2(中級):Q16〜Q35 — docstring・注意書き・前提条件
- レベル3(上級・実務):Q36〜Q50 — レビュー対応・リファクタ提案・AI補助コメント
- 各問題には
- ✅ 出題文
- 💡 模範解答
- 🧩 採点コード(正誤判定用の関数)
が含まれます。
レベル1(基礎)Q1〜Q15
目的:コメントの基本ルールに慣れる
Q1
出題
次の関数に「この関数が何をするか」をコメントで書いてください。
def hello():
print("Hello, Python!")
Python解答例
# "Hello, Python!" を出力する関数
def hello():
print("Hello, Python!")
Python採点コード
def check_q1(answer: str) -> bool:
return "Hello" in answer and "#" in answer
PythonQ2
出題
次のコードに「変数xの意味」をコメントで付けてください。
x = 5
Python解答例
x = 5 # ユーザーの入力回数を保持
Python採点コード
def check_q2(answer: str) -> bool:
return "#" in answer and len(answer.split("#")[1].strip()) > 0
PythonQ3〜Q15(例題省略)
(内容例)
- Q3: 行末コメント(演算の理由を書く)
- Q4: 不要コメントを見抜く
- Q5: TODO コメントを書く
- Q6: 空リスト判定の意図を書く
- Q7: ループの終了条件に説明を加える
- Q8: “なぜこの初期値?” の理由を書く
- Q9: コメントの誤字修正
- Q10: 一行コメントを複数行に整理
- Q11: コードの見出しコメントを書く(# — 処理開始 —)
- Q12: 「何をしないか」を説明するコメント
- Q13: 環境依存コードに注意コメント
- Q14: 処理時間の注意コメント
- Q15: # NOTE コメントを入れる
レベル2(中級)Q16〜Q35
目的:docstring・前提条件・テスト例をコメントで書けるようにする
Q16
出題
次の関数に docstring を追加してください。
def add(a, b):
return a + b
Python解答例
def add(a, b):
"""2つの数 a, b の和を返す。"""
return a + b
Python採点コード
def check_q16(answer: str) -> bool:
return '"""' in answer and "和" in answer
PythonQ17〜Q35 の主な出題テーマ
| No | 内容 |
|---|---|
| 17 | 引数と戻り値の説明を追加する |
| 18 | docstring に使用例を追加する |
| 19 | 注意点(例外発生条件)を書く |
| 20 | 「なぜこの方法か」をコメントする |
| 21 | 数学的背景をコメントに添える |
| 22 | 前提条件をコメントで明示する |
| 23 | 返り値の単位(例: 秒・円)を説明する |
| 24 | 他関数への依存関係を書く |
| 25 | TODO/FIXME/NOTEの使い分け |
| 26 | 複数行docstring(引数説明付き)を書く |
| 27 | 複数戻り値の説明をする |
| 28 | データ型注釈とdocstringの整合を取る |
| 29 | 例外をraiseする箇所に警告コメント |
| 30 | 外部ライブラリ依存の説明を書く |
| 31 | API呼び出し関数の副作用をdocstringに書く |
| 32 | 英日両方のコメントを入れる |
| 33 | コード全体の概要コメント(ファイル冒頭) |
| 34 | 処理ステップごとに見出しコメントを付ける |
| 35 | コードリーダビリティ向上のためのコメント再構成 |
レベル3(上級)Q36〜Q50
目的:実務・チーム開発で使う「レビュー・設計意図コメント」
Q36
出題
次の関数のコメントを「なぜそのアルゴリズムを選んだのか」に焦点を当てて書き直してください。
def bubble_sort(arr):
for i in range(len(arr)):
for j in range(len(arr)-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
Python解答例
# シンプルさを優先してバブルソートを使用(入力が小さい場合のみ想定)
def bubble_sort(arr):
for i in range(len(arr)):
for j in range(len(arr)-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
PythonQ37〜Q50 の主な出題テーマ
| No | 内容 |
|---|---|
| 37 | 古いコメントとコードの不整合を修正する |
| 38 | リファクタ提案コメントを書く |
| 39 | パフォーマンスに関する注意コメント |
| 40 | 並列処理に関する注意点を書く |
| 41 | 外部API制限に関するNOTEを付ける |
| 42 | テスト戦略に関するコメントをdocstringに書く |
| 43 | セキュリティに関する警告コメント(例:入力検証) |
| 44 | ログ出力方針をコメントに書く |
| 45 | バージョン依存コードへの警告 |
| 46 | AI生成コードに説明コメントを添える |
| 47 | チームレビューで意図を共有するコメント |
| 48 | 関数削除予定(deprecate)コメントを書く |
| 49 | 実装ポリシーをファイル冒頭で明記 |
| 50 | コメント品質を自動チェックする仕組みを提案する(meta問題) |
自動採点サンプル(共通関数)
以下のようなテンプレートで、全問題を自動チェックできます👇
def check_answer(qnum: int, answer: str) -> bool:
# 各問題ごとに条件を簡単に判定
checks = {
1: lambda a: "#" in a and "Hello" in a,
2: lambda a: "#" in a,
16: lambda a: '"""' in a and "和" in a,
36: lambda a: "バブルソート" in a or "bubble" in a,
}
return checks.get(qnum, lambda a: bool(a.strip()))(answer)
Python活用方法(初心者〜講師向け)
- Jupyter NotebookやVS Code上で問題文+解答欄を出す。
check_answer(Qn, my_code)関数で自動判定。- 間違えたらヒントを表示するようにも改良可。
- Docstring問題では
help(func)で確認させる。


