第4章 制御構造ツール(40問中9問)
Python3基礎試験の制御構造:range()・break・ループのelse
第4章の制御構造ツールは、40問中9問と最も出題が多い章です。このページでは、結果を取り違えやすい4つの動き(range()、breakとcontinue、ループのelse、関数の既定値)を、Python 3.9.6で実際に実行した結果で確かめます。覚えるのは、range()の終端値は含まれないこと、ループのelseはbreakされなかったときに動くこと、既定値のリストは呼び出しをまたいで使い回されることの3つです。
このページは試験の学習用の整理です。公式の問題は転載せず、コードはすべて説明用に作った例です。
この記事の目次
公式情報の確認
試験日、料金、申込条件、試験方式など変動する情報は、公式情報を最終確認してください。 当サイトの一次情報確認日: 2026-09-18。
試験の出題範囲・実施要項は変動するため、受験前に公式情報を確認してください。
結論
- range(5) は 0 から 4 の5個。終端値は含まれず、range(10, 0, -3) のように増加量を負にもできる
- break は最も内側のループを抜け、continue はその回の残りだけを飛ばして次の回へ進む
- ループの else は、break が実行されずにループが終わったときに動く。回数が0回でも動く
- 関数の既定値は1度しか評価されない。リストを既定値にすると、呼ぶたびに同じリストが育つ
range():終端値は含まれない
range() は、等差数列を作る組み込みの関数です。公式チュートリアルによると、指定した終端値は生成されるシーケンスに入らず、range(10) は10個の値を生成します。開始値や増加量(負でもよい)を指定することもできます。
| コード | 実行結果 | ひとこと |
|---|---|---|
list(range(5)) | [0, 1, 2, 3, 4] | 終端の5は入らない。値は5個 |
list(range(5, 10)) | [5, 6, 7, 8, 9] | 開始値を指定。終端の10は入らない |
list(range(0, 10, 3)) | [0, 3, 6, 9] | 3つ目の数が増加量 |
list(range(10, 0, -3)) | [10, 7, 4, 1] | 増加量は負でもよい。終端の0は入らない |
list(range(3, 3)) | [] | 開始値と終端値が同じなら空 |
for i in range(3): pass
print(i) | 2 | ループが終わっても i は最後の値を覚えている |
「終端値の手前まで」と読むと、range(5, 10) の個数は 10 − 5 = 5 個と数えられます。増加量が負のときは、開始値が終端値より大きくないと空になります。
breakとcontinue:何を飛ばすか
公式チュートリアルによると、break は、それを囲む最も内側の for または while ループを抜けます。continue はループの次のイテレーションを実行します。ループ全体を終えるのが break、その回だけをやめるのが continue です。
| コード | 実行結果 | ひとこと |
|---|---|---|
for i in range(5):
if i == 3:
break
r.append(i) | [0, 1, 2] | break は i が3になった時点でループごと抜ける |
for i in range(5):
if i == 3:
continue
r.append(i) | [0, 1, 2, 4] | continue は3のときだけ飛ばし、4以降は続く |
for a in range(3):
for b in range(3):
if b == 1:
break
c += 1 | c は 3 | break が抜けるのは内側の for だけ。外側は3回回る |
入れ子のループでは、break が抜けるのは内側の1つだけです。外側のループまで終わらせたいときは、別の方法が必要になります。
ループのelse節:動く条件
公式チュートリアルは、for または while ループの else 節は、break を実行せずにループが終了すると実行されると説明しています。if の else のように「条件が偽だったとき」ではなく、「break されなかったとき」と読みます。
| コード | 実行結果 | ひとこと |
|---|---|---|
for n in range(2, 6):
if n == 9:
break
else:
print('else実行') | else実行 | break が一度も実行されなかったので else が動く |
for n in range(2, 6):
if n == 4:
break
else:
print('else実行') | (何も表示されない) | n が4で break したので else は飛ばされる |
for n in []:
pass
else:
print('空でもelse実行') | 空でもelse実行 | 回数が0回でも、break が無いので else は動く |
k = 0
while k < 3:
k += 1
else:
print('while else', k) | while else 3 | while にも else があり、条件が偽になって終わると動く |
else に入るかどうかは、回った回数ではなく break の有無で決まります。探し物のループで、見つかったら break し、見つからないまま終わったときだけ else で「見つからなかった」と処理する形が代表的な使い方です。
| やりたいこと | 使うもの | 注意 |
|---|---|---|
| ループを今すぐ終わらせたい | break | 最も内側のループだけを抜ける |
| この回の残りを飛ばして次の回へ | continue | ループは終わらない |
| 探して見つからなかったときだけ処理する | ループの else | break されなかったときに動く |
| ある範囲の整数を順に回す | range(開始, 終端, 増加量) | 終端は含まれない |
既定値のリストは使い回される
公式チュートリアルは、デフォルト値は1度しか評価されないと警告しています。デフォルト値がリストや辞書のような変更できるオブジェクトのとき、この点が結果に影響します。
| コード | 実行結果 | ひとこと |
|---|---|---|
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3)) | [1]
[1, 2]
[1, 2, 3] | 呼ぶたびに新しいリストにならず、同じリストが育つ |
def g(a, L=None):
if L is None:
L = []
L.append(a)
return L
print(g(1))
print(g(2)) | [1]
[2] | None を既定値にして中で作ると、毎回新しいリストになる |
def f(a, L=[]) は、呼ぶたびに空のリストを作るのではなく、関数を定義した時点で作った1つのリストを使い続けます。呼び出しごとに新しいリストが必要なら、既定値を None にして、関数の中で None のときだけリストを作ります。
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
よくある質問
第4章の制御構造ツールは、何問出ますか?
このサイトが整理した公式の章別出題数では、40問中9問(22.5%)で、14章のうち最も多い章です。for・range()・breakとcontinue・ループのelse・関数の引数など、実行結果を読み取る問題が中心になります。
range(10) の最後の値は、10ですか?
10ではなく9です。公式チュートリアルによると、終端値は生成されるシーケンスに入らず、range(10) は10個の値(0から9)を生成します。range(1, 10) なら1から9の9個です。
ループの else は、ループが1回も回らなくても動きますか?
動きます。else が動くかどうかを決めるのは、回った回数ではなく break が実行されたかどうかです。上の空のリストの例では、break が無いので else が実行されました。
関数の既定値に空のリストを書くと、なぜ値がたまるのですか?
公式チュートリアルによると、デフォルト値は1度しか評価されないためです。リストのような変更できるオブジェクトを既定値にすると、同じものが呼び出しをまたいで使い回されます。None を既定値にして、関数の中で新しいリストを作れば避けられます。
