Python | レベル別練習問題:コメント

Python
スポンサーリンク

では、「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
Python

Q2

出題
次のコードに「変数xの意味」をコメントで付けてください。

x = 5
Python

解答例

x = 5  # ユーザーの入力回数を保持
Python

採点コード

def check_q2(answer: str) -> bool:
    return "#" in answer and len(answer.split("#")[1].strip()) > 0
Python

Q3〜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
Python

Q17〜Q35 の主な出題テーマ

No内容
17引数と戻り値の説明を追加する
18docstring に使用例を追加する
19注意点(例外発生条件)を書く
20「なぜこの方法か」をコメントする
21数学的背景をコメントに添える
22前提条件をコメントで明示する
23返り値の単位(例: 秒・円)を説明する
24他関数への依存関係を書く
25TODO/FIXME/NOTEの使い分け
26複数行docstring(引数説明付き)を書く
27複数戻り値の説明をする
28データ型注釈とdocstringの整合を取る
29例外をraiseする箇所に警告コメント
30外部ライブラリ依存の説明を書く
31API呼び出し関数の副作用を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]
Python

Q37〜Q50 の主な出題テーマ

No内容
37古いコメントとコードの不整合を修正する
38リファクタ提案コメントを書く
39パフォーマンスに関する注意コメント
40並列処理に関する注意点を書く
41外部API制限に関するNOTEを付ける
42テスト戦略に関するコメントをdocstringに書く
43セキュリティに関する警告コメント(例:入力検証)
44ログ出力方針をコメントに書く
45バージョン依存コードへの警告
46AI生成コードに説明コメントを添える
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

活用方法(初心者〜講師向け)

  1. Jupyter NotebookやVS Code上で問題文+解答欄を出す。
  2. check_answer(Qn, my_code) 関数で自動判定。
  3. 間違えたらヒントを表示するようにも改良可。
  4. Docstring問題では help(func) で確認させる。
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました