Kodrill

制御構造と関数

Python 3 エンジニア認定基礎試験

if・for・range・break/continue・else節・関数定義・引数・lambda

問題数
18 問
合格ライン
70%
実行して確認済み
17 問
この分野の要点を読む6 章・約 8 分。実行して確かめたコード例と、試験でよくある引っかけをまとめています

ログインなしで試す

無料の 5 問を、1問ごとに正誤と解説を見ながら解けます。解答は保存されません。

5 問を試す

無料登録して学習を記録する

学習履歴・ダッシュボード・ブックマーク・模試モードが使えます。

★ 残り 13 問はプレミアム会員限定です

無料プランでは先頭 5 問まで解けます。プレミアムなら全問題・苦手問題の復習・広告非表示が使えます。
料金プランを見る

問題と解説を見る (無料)

登録しなくても、次の5問は問題文と解説をそのまま読めます。

制御構造と関数の要点

内容の確認日: 2026-10-04

この分野は「Pythonチュートリアル」の第 4 章 (その他の制御フローツール) に対応し、試験で最も出題数の多い章の 1 つです。前半は if・for・while などの制御構造、後半は関数の定義と、さまざまな引数の渡し方が問われます。

特に、ループの else 節、デフォルト引数が評価されるタイミング、*args・**kwargs の受け取り方は、Python 独特の仕様なので、ほかの言語の経験がある人ほど注意が必要です。

if 文と for 文

if 文は if・elif・else を組み合わせて書き、上から順に条件を調べて、最初に真になったブロックだけを実行します。elif は何個でも書けます。

for 文は、数値の範囲ではなく、リストや文字列などのシーケンスの要素を順に取り出します。数値の並びが欲しいときは range() を使います。

・range(5): 0, 1, 2, 3, 4 (5 は含まない) ・range(2, 6): 2, 3, 4, 5 ・range(1, 10, 3): 1, 4, 7 (3 つ目の引数は増分) ・range(5, 0, -2): 5, 3, 1

range() が返すのはリストではなく、必要なときに値を作るイテラブルです。中身を確かめたいときは list(range(5)) のようにリストに変換します。

Python
print(list(range(1, 10, 3)), list(range(5, 0, -2)))for word in ["cat", "window"]:    if len(word) > 5:        print(word, "は長い")    elif len(word) > 2:        print(word, "は普通")    else:        print(word, "は短い")
ターミナル
python3 main.py
[1, 4, 7] [5, 3, 1]
cat は普通
window は長い

break・continue とループの else 節

break はループをすぐに終了し、continue はその回の残りを飛ばして次の回に進みます。

Python の for 文と while 文には else 節を付けられます。else 節は、ループが break されずに最後まで回りきったときに実行されます。break で抜けたときは実行されません。「探して、見つからなかったときの処理」を書くのに便利です。

Python
for target in [3, 8]:    for v in [1, 3, 5]:        if v == target:            print(target, "あり")            break    else:        print(target, "なし")
ターミナル
python3 main.py
3 あり
8 なし

pass は何もしない文です。文法上、文が必要だけれど何もすることがない場所 (中身が空の関数やクラスなど) に書きます。

関数の定義と戻り値

関数は def 関数名(引数): で定義し、return で値を返します。return がない関数や、値を書かずに return した関数は None を返します。関数の本体の最初に書いた文字列はドキュメンテーション文字列 (docstring) になります。

引数に既定値を付けたデフォルト引数の値は、関数を定義したときに 1 回だけ評価されます。そのため、リストのような変更可能な値を既定値にすると、呼び出しのたびに同じリストが使い回されます。避けるには、既定値を None にして関数の中でリストを作ります。

Python
def add_item(item, box=[]):    box.append(item)    return box​def add_item_safe(item, box=None):    if box is None:        box = []    box.append(item)    return box​print(add_item("a"))print(add_item("b"))print(add_item_safe("a"))print(add_item_safe("b"))
ターミナル
python3 main.py
['a']
['a', 'b']
['a']
['b']

いろいろな引数の渡し方

関数の引数は、次のように受け取り方・渡し方を組み合わせられます。

・キーワード引数: f(qty=2) のように引数名を指定して渡す。位置引数の後ろにしか書けない ・*args: 余った位置引数をタプルで受け取る ・**kwargs: 余ったキーワード引数を辞書で受け取る ・*args より後ろに書いた引数は、キーワード引数でしか渡せない ・呼び出すときに *リスト と書くと要素が位置引数に、**辞書 と書くとキーワード引数に展開される

Python
def order(item, qty=1, *extras, note="-", **options):    print(item, qty, extras, note, options)​order("coffee")order("tea", 2, "milk", "sugar", note="hot", size="L")args = ["juice", 3]order(*args, **{"note": "cold"})
ターミナル
python3 main.py
coffee 1 () - {}
tea 2 ('milk', 'sugar') hot {'size': 'L'}
juice 3 () cold {}

定義のときも、デフォルト値のある引数の後ろに、デフォルト値のない引数は置けません。このような関数は、実行する前の構文の解析の時点でエラー (SyntaxError) になるので、ファイルの中のどのコードも実行されません。

Python
print("ここは実行されない")​def f(a=1, b):    return a + b
ターミナル
python3 main.py

例外が発生: SyntaxError

lambda 式とコーディングスタイル

lambda 引数: 式 で、名前のない小さな関数を作れます。本体には式を 1 つだけ書け、その値が戻り値になります。sort や sorted の key に渡す使い方が代表的です。

Python
pairs = [(1, "one"), (2, "two"), (3, "three")]pairs.sort(key=lambda p: p[1])print(pairs)square = lambda x: x * xprint(square(4))
ターミナル
python3 main.py
[(1, 'one'), (3, 'three'), (2, 'two')]
16

Python のコーディングスタイルの指針 PEP 8 では、インデントに空白 4 つを使う (タブと混ぜない)、1 行を 79 文字以内にする、関数名や変数名は lower_case_with_underscores、クラス名は CapitalizedWords にする、などを勧めています。

試験でよくある引っかけ

  • range の終わりの値

    range(1, 10, 3) は 1, 4, 7 です。終わりの値 10 は含みません。

  • ループの else 節

    else 節は break されずに最後まで回ったときだけ実行されます。break で抜けると実行されません。

  • 戻り値のない関数

    return のない関数を print すると None が出力されます。

  • デフォルト引数のリスト

    デフォルト引数は定義時に 1 回だけ評価されるので、box=[] は呼び出しのたびに同じリストが使われます。

  • *args と **kwargs の型

    *args はタプル、**kwargs は辞書で受け取ります。

  • 引数の順番

    デフォルト値のない引数を、デフォルト値のある引数の後ろに書くと SyntaxError です。

問題で確認する

この分野の問題を、解説つきで読めます (登録不要)。

出典・参考

コード例は、実際に実行して結果を確認しています。