順番に読み進めながら学べます

Python 文法の総まとめ問題 — 制御構文・関数・例外を組み合わせて解く

内包表記でのフィルタ + 二乗、safe_divideでのtry/except、戻り値を2倍にする@doubleデコレータの3問。文法章の知識を組み合わせて手を動かす総まとめ演習です。

問題 1: 内包表記でフィルタしながら変換する

リスト内包表記のifフィルタと、`による二乗計算を組み合わせます。条件に合う要素だけを選び、別の値に変換して新しいリストを作る**という、内包表記の典型的な使い方です。

解説:内包表記の 3 ステップ
range(1, 16)1〜15if n % 3 == 0or n % 5 == 03 / 5 / 6 / 9 / 10 / 12 / 15n ** 2各要素を二乗[9, 25, 36, 81,100, 144, 225]if で絞る** 2リスト化
反復 → フィルタ → 変換の 3 段階で新しいリストを組み立てる。

1 から 15 までの数値の中から、3 の倍数または 5 の倍数だけを取り出し、それぞれを二乗した値を集めたリストを作って出力してください。

リスト内包表記 1 行で書けます。

Python エディタ

コードを実行してください

問題 2: try / except で安全な除算関数を作る

ゼロ除算が起きても落ちない関数safe_divide(a, b)を作ります。defでの関数定義、try / exceptによる例外キャッチ、returnによる戻り値の使い分けの組み合わせ問題です。

解説:try / except の処理フロー
safe_divide(a, b)呼び出しtry:return a / b正常5.0except:print + return Noneエラー時None成功ゼロ除算
正常時はtryの中でreturnされ、エラー時は対応するexceptに飛ぶ。

数値abを受け取る関数safe_divideを作ってください。通常はabで割った結果を返しますが、ゼロ除算が起きてもエラーで落ちないようにし、その場合は"ゼロ除算は禁止"を画面に出力したうえでNoneを返してください。

動作確認のため、safe_divide(10, 2)safe_divide(10, 0)を順に呼び出して、戻り値をprint()で表示してください。

Python エディタ

コードを実行してください

問題 3: デコレータで関数の戻り値を後から変える

関数の本体に手を入れずに、戻り値を 2 倍にするデコレータ@doubleを作ります。関数を引数に取り、新しい関数を返す関数というデコレータの構造そのものを実装する課題です。

解説:デコレータの構造
def add(a, b):return a + b@double= double(add)wrapper(*args)= add(*args) * 2add(3, 5) → 16(8 を 2 倍)包むwrapper を返す呼び出し
デコレータは関数を受け取り、新しい関数を返す関数@doubleadd = double(add)と同じ意味。

関数の戻り値を2 倍にするデコレータdoubleを作ってください。

そのうえで、a + bを返すシンプルな関数add(a, b)doubleを適用し、add(3, 5)を呼び出して結果をprint()で表示してください。デコレータが効いていれば、結果は単純な合計とは違う値になります。

Python エディタ

コードを実行してください

ここまでお疲れ様でした

Python 文法の章はこれで完了です。条件分岐・ループ・例外処理といった制御構文、def / lambdaでの関数定義、内包表記・高階関数・デコレータ・ジェネレータまで、処理の流れをご自身で組み立てる道具がひととおり揃いました。これで、いくつかの値を加工して結果を返すような関数を、ご自身の手で書ききれるはずです。

次の章「Python オブジェクト指向」では、classでご自身の型を定義する書き方、__init__によるコンストラクタ、継承・ポリモーフィズム・カプセル化、__add__などの特殊メソッド、withコンテキストマネージャーや型ヒントまで、データと処理を 1 つにまとめて管理する設計を学びます。