Python3エンジニア認定基礎試験 第4章 制御構造ツール 予想問題と解説
Python3エンジニア認定基礎試験「第4章 制御構造ツール」の予想問題を43問収録しています。このページでは代表39問を解説つきで掲載し、全問は演習画面で解けます。出題は公式シラバスの範囲内です。
この章の要点
break・continue・ループのelse、for文とrange、引数の指定、if文、ラムダ式とドキュメンテーション文字列、pass文などを扱う分野です。全43問(基礎9問・標準26問・応用8問)を収録しています。
- break・continue・ループのelse
- for文とrange
- 引数の指定
- if文
- ラムダ式とドキュメンテーション文字列
- pass文
- match文
- 関数の定義
- コーディングスタイル
情報源と編集区分
公式範囲を確認し、問題数・難易度・確認点は当サイトが集計・編集。 一次情報確認日: 2026-09-18。
試験概要(公式)確認しておきたいポイント
当サイトの作問時に観察した、取り違えやすい論点です(公式の統計ではありません)。
- ループの else 節が実行される条件。break で抜けたときは実行されず、使い切って終わったときに実行される。return や例外で途中終了した場合も実行されない。
- range の終了値が含まれないこと。range(2, 10) は 9 までで、10 は含まれない。
- デフォルト引数の評価は定義時に一度だけ。可変オブジェクトをデフォルト値にすると呼び出し間で状態が残る。
- continue と break の混同。continue は反復を飛ばすだけでループを終わらせない。
この章の関連用語
この分野の問題で扱う用語です。意味があいまいなものは、用語集で定義を確認できます。
この章に関連する比較記事
混同しやすい2つの概念を並べて整理した記事です。
よくある質問
Q第4章 制御構造ツールは何問収録されていますか?
現在43問を収録しています。内訳は基礎9問・標準26問・応用8問です。
Q第4章 制御構造ツールの頻出論点は何ですか?
break・continue・ループのelse、for文とrange、引数の指定、if文、ラムダ式とドキュメンテーション文字列、pass文などが出題対象です(当サイト収録問題に基づく編集部集計)。
Q間違えた問題はどう復習すればいいですか?
誤答した選択肢のどこがずれていたかを解説で確認し、関連用語がある場合は用語集で定義に戻ってから再演習することをおすすめします。
for ループに else 節を付けたとき、else 節が実行されるのはどの場合か。
答えと解説を見る
正解は「ループが最後まで回り切り、break で抜けなかったとき」である。公式チュートリアルは「break を実行せずにループが終了すると、else 節が実行されます」と述べ、for 文については「ループ処理の最後のイテレーションが実行されたあと、つまり break が発生しなかった場合に実行されます」と記している。break で抜けた場合は else 節は実行されない。あわせて公式は「return や例外の発生によってループが途中で終了した場合にも else 節の実行はスキップされます」とも述べている。continue については公式に明示の記述は無いが、continue は今回の反復を飛ばして次へ進めるだけでループを終わらせないため、最後まで回り切れば else 節は実行される。反復対象が空の場合も本体は一度も実行されないままループは正常に終わるので else 節は実行され、「空のときだけ」という限定は誤りである。この性質は、公式が挙げる素数探索の例のように「探したが見つからなかった場合」の処理を else 節に置く書き方に使われる。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール、2026-09-11確認)
range(2, 10) が生成する値の並びはどれか。
答えと解説を見る
正解は「2, 3, 4, 5, 6, 7, 8, 9」である。range に2つの引数を渡した場合、1つ目が開始値、2つ目が終了値で、終了値は含まれない。そのため 2 から 9 までの8個の値が生成される。終了値を含めたい場合は range(2, 11) と書く。開始値を省略した range(10) は 0 から始まるため、1 から始まる並びにはならない。増分を指定するには3つ目の引数が必要で、2つの引数だけでは偶数に限定されない。range は for i in range(2, 10): のように for文と組み合わせて使うことが多く、添字が必要な場面では for i in range(len(seq)): のように len() と組み合わせる書き方もある。値と添字の両方を同時に扱いたいときは、range と len を組み合わせるより enumerate() を使うほうが読みやすいとされる。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール、2026-09-11確認)
関数のデフォルト引数に可変オブジェクトを指定したとき、注意すべき挙動はどれか。
答えと解説を見る
正解は「デフォルト値は関数を定義した時点で一度だけ評価され、呼び出しごとに作り直されない」である。そのためリストや辞書のような可変オブジェクトをデフォルト値にすると、前の呼び出しで加えた要素が次の呼び出しにも残り、呼び出しを重ねるほど蓄積していく。呼び出しごとに新しく作り直されるわけではないので、毎回空から始めたい場合はデフォルト値を None にして関数の中で作る書き方をとる。可変オブジェクトをデフォルト引数に指定すること自体は文法上できるため、定義時にエラーにはならない。評価の順序を入れ替える必要があるという話でもない。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール、2026-09-11確認)
複数の条件を順に判定し、どれにも当てはまらない場合の処理も書きたい。用いる構文の並びはどれか。
答えと解説を見る
正解は「if / elif / else」である。Python では2つ目以降の条件を elif で書き、どれにも当てはまらない場合を else で書く。elseif という綴りは Python の構文には無い。else if と2語に分けて書くこともできず、otherwise という語も存在しない。switch / case / default は他の言語の構文で、Python では条件分岐に使わない。なお Python には match 文があるが、これは値の形に応じて分岐する別の構文で、case と組み合わせて使う。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール、2026-09-11確認)
リストの要素と、その位置を示す番号を同時に取り出しながらループしたい。用いる関数はどれか。
答えと解説を見る
正解は「enumerate()」である。設問は反復可能オブジェクトから要素と位置番号を同時に取り出す方法を尋ねている。range は連続した整数を生成する関数であり、それ自体は対象の要素を返さないため、要素を得るには別途インデックス参照が必要になる。len は要素の総数を返す関数であり、ループの中で要素を1つずつ取り出す操作とは無関係である。zip は複数の並びを同じ位置ごとに組み合わせる関数であり、1つの並びから位置番号を得る用途とは目的が異なる。位置番号と要素の組を1つの並びから直接取り出せるのは enumerate である。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール、2026-09-11確認)
関数定義の先頭に書いた文字列について、正しい説明はどれか。
答えと解説を見る
正解は「ドキュメンテーション文字列として扱われ、__doc__ から参照できる」である。関数定義の最初に置いた文字列はその関数の説明として扱われ、実行時にも __doc__ 属性から読み取れる。行頭に # を付けたコメントは実行時に残らないが、ドキュメンテーション文字列は文字列として残るため性質が違う。戻り値になるのは return で返した値であり、先頭の文字列は戻り値にならない。型の指定は関数のアノテーションで行い、__annotations__ に入るのはそちらである。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール、2026-09-11確認)
構文上は文が必要だが、何も実行させたくない。用いる文はどれか。
答えと解説を見る
正解は「pass」である。設問は文法上何もしないことを目的とした文を尋ねている。continue は現在の反復を打ち切って次の反復に進む文であり、ループの外では使えず「何もしない」とは働きが異なる。break はループ自体を終了させる文であり、これもループの外では使えない。return は関数の実行を終えて呼び出し元へ値を返す文であり、値を返すという明確な働きを持つ。文法上文が必要な位置を、何の処理も行わずに埋められるのは pass だけである。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール、2026-09-11確認)
match 文で、どのパターンにも当てはまらない場合を受けるために使う書き方はどれか。
答えと解説を見る
正解は「case にワイルドカードを書く」である。設問はどのパターンにも一致しなかった場合の受け皿をどう書くかを尋ねている。case を書かずに空行を挟む方法は Python の構文として成立しない。match の直後に else を続ける書き方も match 文には存在しない。default という語は他言語の分岐構文で見かける語であり、Python の match 文の構文要素ではない。どのパターンにも当てはまらない場合を受けるには、ワイルドカードのパターンを持つ case を用意する。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール、2026-09-11確認)
return 文を書かずに終わる関数が返す値はどれか。
答えと解説を見る
正解は「None」である。関数の本体が return 文を通らずに終わった場合、戻り値は None になる。判断の手順としては、まず関数の本体に return があるかを確かめ、無ければ、またはあっても実行の流れがそれを通らずに終われば戻り値は None になると考える。0 や空文字列が返るわけではなく、どちらも return 文で明示して返さなければ得られない値であり、関数の本体を最後まで実行しただけでは現れない。最後に評価した式の値が自動で戻り値になる言語もあるが、Python の関数ではそのような仕組みはなく、返したい値があるなら return 文で明示する必要がある。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール、2026-09-11確認)
複数人でPythonのコードを書くとき、読みやすさをそろえるために公式チュートリアルが紹介しているスタイルガイドはどれか。
答えと解説を見る
正解は「PEP 8」である。公式チュートリアルはコーディングスタイルの節で、Pythonのスタイルガイドとして PEP 8 を挙げ、多くのプロジェクトで採用されている読みやすいコーディングスタイルを示すものだと説明している。読みやすさをそろえる共通のガイドが無いという説明や、Pythonの文法そのものを定めた仕様書だという説明、実行速度を最優先し読みやすさを扱わないという説明は、公式チュートリアルが PEP 8 を紹介している趣旨と合わない。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール、2026-09-11確認)
def f(a, b, /, c): return a + b + c と定義した。f(1, 2, c=3) と f(a=1, b=2, c=3) をそれぞれ実行したときの結果として正しいものはどれか。
答えと解説を見る
正解は「f(1, 2, c=3) は 6 を返し、f(a=1, b=2, c=3) は TypeError になる」である。/ より前に置いた引数は位置専用で、公式チュートリアルは「位置専用 の場合、引数の順序が重要であり、キーワードで引数を渡せません」と述べている。a と b は / の前にあるので位置でしか渡せず、f(1, 2, c=3) は a=1・b=2 が位置、c=3 がキーワードで渡るため、1 + 2 + 3 で 6 を返す。/ の後の c は位置またはキーワードの引数なので、キーワードで渡しても問題ない。一方、f(a=1, b=2, c=3) は位置専用の a と b をキーワードで渡しているため TypeError になる。公式チュートリアルで pos_only_arg(arg=1) が TypeError になる例と同じ仕組みである。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール 4.9.3 特殊なパラメータ、2026-09-20確認)
def g(a, *, b): return a * b と定義した。g(2, 3) と g(2, b=3) をそれぞれ実行したときの結果として正しいものはどれか。
答えと解説を見る
正解は「g(2, 3) は TypeError になり、g(2, b=3) は 6 を返す」である。引数リストの * より後ろに置いた引数はキーワード専用になり、公式チュートリアルは「引数リストの最初の キーワード専用 引数の直前に * を配置します」と述べている。g では b が * の後ろにあるので、b は g(2, b=3) のようにキーワードで渡さなければならない。g(2, 3) は 3 を位置引数として渡すことになるが、受け付けられる位置引数は a の1つだけなので TypeError になる。公式チュートリアルで kwd_only_arg(3) が TypeError(takes 0 positional arguments but 1 was given)になり、kwd_only_arg(arg=3) が 3 を返す例と同じ仕組みである。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール 4.9.3 特殊なパラメータ、2026-09-20確認)
def concat(*args, sep='/'): return sep.join(args) と定義した。concat('x', 'y', '-') を実行した結果はどれか。
答えと解説を見る
正解は 'x/y/-' である。*args は、仮引数リストの残りの位置引数をすべてタプルに集める。公式チュートリアルは「通常このような 可変 引数は、関数に渡される入力引数の残りを全て掬い取るために、仮引数リストの最後に置かれます」と述べている。concat('x', 'y', '-') の3つはすべて args に入り、args は ('x', 'y', '-') になる。*args の後ろの sep はキーワード専用の引数で、公式チュートリアルは「位置引数ではなくキーワード引数としてのみ使えることを意味します」と述べているため、'-' が sep になることはない。sep は既定値の '/' のままで、'/'.join(('x', 'y', '-')) が 'x/y/-' になる。区切りを '-' にしたいなら concat('x', 'y', sep='-') と書く。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール 4.9.4 任意引数リスト、2026-09-20確認)
args = [2, 8] のとき、list(range(*args)) の結果はどれか。
答えと解説を見る
正解は [2, 3, 4, 5, 6, 7] である。公式チュートリアルは、引数がすでにリストやタプルになっていて個別な位置引数を要求する関数呼び出しに渡す場合は「関数呼び出しを * 演算子を使って書き、リストやタプルから引数をアンパックします」と述べ、args = [3, 6] のとき list(range(*args)) が [3, 4, 5] になる例を示している。range(*args) は args の要素を取り出して range(2, 8) と書いたのと同じになる。range() は終端の値を含まないので、2 から 7 までの整数が並ぶ。* を付けずに range(args) と書くとリストを1つの引数として渡すことになり TypeError になるが、* を付けたこの式は TypeError にならない。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール 4.9.5 引数リストのアンパック、2026-09-20確認)
items = [('a', 3), ('b', 1), ('c', 2)] に対して items.sort(key=lambda t: t[1]) を実行した後の items はどれか。
答えと解説を見る
正解は [('b', 1), ('c', 2), ('a', 3)] である。lambda t: t[1] は、タプル t の2番目の要素を返す名前のない小さな関数である。公式チュートリアルは「list.sort() はソートキー関数 key を受け取りますが、これにはラムダ関数を渡せます」と述べ、ラムダ式は「関数オブジェクトが要求されている場所にならどこでも使うことができます」「構文上単一の式に制限されています」と説明している。key の値は ('a', 3) が 3、('b', 1) が 1、('c', 2) が 2 なので、公式チュートリアルの例と同じく key の値が小さい順に並び、2番目の要素が 1、2、3 のタプルの順になる。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール 4.9.6 ラムダ式、2026-09-20確認)
def area(width, height=1): return width * height と定義し、params = {'width': 4, 'height': 5} がある。params の内容をキーワード引数として渡して、20 を得る呼び出しはどれか。
答えと解説を見る
正解は area(**params) である。公式チュートリアルは、リストやタプルを * 演算子でアンパックして位置引数として渡せると述べたうえで、「同じやりかたで、 ** オペレータを使って辞書でもキーワード引数を渡すことができます」と述べ、辞書 d を parrot(**d) として渡す例を示している。area(**params) は area(width=4, height=5) と書いたのと同じになり、4 * 5 で 20 を返す。area(*params) は辞書のキーの 'width' と 'height' を位置引数として渡すことになり、文字列どうしの掛け算で TypeError になる。area(params) と area(width=params) は辞書そのものを width に渡すので、辞書に 1 を掛けようとして TypeError になる。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール 4.9.5 引数リストのアンパック、2026-09-20確認)
公式チュートリアル4.1は、if / elif / else の代わりにどのような場面でmatch文が便利だと述べているか。
答えと解説を見る
正解は「いくつかの定数と同じ値かを比較する場合や、特定の型や属性かを確認する場合」である。公式チュートリアル4.1は「いくつかの定数と同じ値かを比較する場合や、特定の型や属性かを確認する場合には、 match 文が便利です」と述べている。一連のif / elif / elifは他の言語のswitch文やcase文の代用になるとも述べられており、match文はその判定を扱いやすくする選択肢として紹介されている。ループの打ち切り、デフォルト引数、例外送出はいずれも別の構文(break文、デフォルト引数指定、raise文)が担う話であり、match文が便利だとされる場面ではない。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.1 if 文、2026-09-28確認)
for num in range(2, 10): の中で、num % 2 == 0 のとき「偶数 num を見つけた」を出力してcontinueし、それ以外は「奇数 num を見つけた」を出力する処理を書くと、どのような出力になるか。
答えと解説を見る
正解は「偶数のときにその回の残りの処理をスキップし、2から9まで偶数と奇数の行が交互に出力される」である。公式チュートリアル4.4はこの例を示し、num % 2 == 0のとき「偶数 num を見つけた」を出力してcontinueし、それ以外は「奇数 num を見つけた」を出力するため、2から9まで偶数と奇数の行が交互に出力されると説明している。continue文はループの次のイテレーションを実行する文であり、内側のfor文・while文から抜け出すbreak文とは役割が異なる。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.4 break 文と continue 文、そしてループの else 節、2026-09-28確認)
class MyEmptyClass: pass という書き方について、公式チュートリアルの説明として正しいものはどれか。
答えと解説を見る
正解は「最小のクラスを作るときによく使われる方法である」である。公式チュートリアル4.6は、class MyEmptyClass: pass を「最小のクラスを作るときによく使われる方法」だと説明し、pass文が構文上は文が必要だがプログラム上何の動作もする必要がないときに使われると述べている。もう一つの使い道として、新しいコードを書いているときの関数や条件文の仮置きの本体を挙げ、def initlog(*args): pass の例も示している。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.6 pass 文、2026-09-28確認)
match文のシーケンスパターンで (x, y, *_) と書いた場合、どのようなシーケンスにマッチするか。
答えと解説を見る
正解は「最低でも2つのアイテムを持つシーケンス」である。公式チュートリアル4.7は、タプルとリストのパターンは任意のシーケンスと一致するが、重要な例外としてイテレーターや文字列ではマッチしないと述べ、[x, y, *rest]のような拡張アンパックをサポートし、(x, y, *_)は最低でも2つのアイテムを持つシーケンスにマッチすると説明している。*_は残りの要素をすべて受け取るワイルドカードであり、残りの個数が0個でも受け取れるため、x, yに対応する先頭2つさえあればマッチする。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.7 match 文、2026-09-28確認)
公式チュートリアル4.8は、Pythonにおける関数への実引数の渡し方についてどのように説明しているか。
答えと解説を見る
正解は「値渡し(call by value)と呼ばれるが、その値とは常にオブジェクトへの参照であり、脚注ではオブジェクトへの参照渡しと言った方がより正確だとしている」である。公式チュートリアル4.8は、実引数は値渡し(call by value)で関数に渡され、ここでの値とは常にオブジェクトへの参照をいうと述べ、脚注で「オブジェクトへの参照渡し (call by object reference) という言ったほうがより正確」と補足している。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.8 関数を定義する、2026-09-28確認)
PEP 8が推奨するコーディングスタイルとして、公式チュートリアル4.10が挙げているものはどれか。
答えと解説を見る
正解は「演算子の前後とコンマの後には空白を入れ、括弧類のすぐ内側には空白を入れない」である。公式チュートリアル4.10は「演算子の前後とコンマの後には空白を入れ、括弧類のすぐ内側には空白を入れないこと: a = f(1, 2) + g(3, 4) 。」と述べている。同節はインデントに空白4つを使いタブは使わないこと、ソースコードの幅が79文字を越えないように行を折り返すこと、関数やクラスの区切りに空行を使うこと、可能ならコメントは行に独立で書くことも挙げており、これらは選択肢0・1・3の内容と反対または別の論点の説明になる。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.10 コーディングスタイル、2026-09-28確認)
range(10) をそのままインタラクティブシェルで評価して表示すると、どのように表示されるか。
答えと解説を見る
正解は「range(0, 10) と表示される」である。公式チュートリアル4.3は、range(10) をそのまま出力すると range(0, 10) と表示される例を示し、「range() が返すオブジェクトは、いろいろな点でリストであるかのように振る舞いますが、本当はリストではありません」「実際にリストを作るわけではないので、スペースの節約になります」と述べている。反復可能なオブジェクトを受け取る関数の例としてsum(range(4))が6になる例も示している。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.3 range() 関数、2026-09-28確認)
ラムダ式について、公式チュートリアル4.9.6の説明として正しいものはどれか。
答えと解説を見る
正解は「構文上単一の式に制限されており、意味付け的には通常の関数定義に構文的な糖衣をかぶせたものに過ぎない」である。公式チュートリアル4.9.6は「ラムダ式は、構文上単一の式に制限されています」「意味付け的には、ラムダ形式は単に通常の関数定義に構文的な糖衣をかぶせたものに過ぎません」と述べ、ラムダ式の関数は関数オブジェクトが要求されている場所ならどこでも使えるとしている。また、入れ子構造になった関数定義と同様、ラムダ式もそれを取り囲むスコープから変数を参照できるとも説明している。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.9.6 ラムダ式、2026-09-28確認)
match point: の中で case Point(x, y) if x == y: に続けて case Point(x, y): を書いた。Point(3, 5) が渡されたとき、if x == y の部分について正しい説明はどれか。
答えと解説を見る
正解は「ガードが false のため match は次の case ブロックの処理に移り、2つ目の case に一致する」である。公式チュートリアル4.7は、パターンに if 節を追加でき、これを「ガード」と呼ぶと述べている。ガードが false の場合、match は次の case ブロックの処理に移動し、ガードを評価する前に値が取り込まれるとも説明している。Point(3, 5) は x == y が false なので、最初の case は実行されず、次の case Point(x, y): が一致する。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.7 match 文、2026-09-30確認)
config = {"bandwidth": 100, "latency": 5, "jitter": 2} に対して match config: と case {"bandwidth": b, "latency": l}: を書いた。このパターンについて正しい説明はどれか。
答えと解説を見る
正解は「マッチして b に 100、l に 5 が取り込まれ、jitter のキーは無視される」である。公式チュートリアル4.7は、マッピングパターン {"bandwidth": b, "latency": l} は辞書から "bandwidth" と "latency" の値を取り込み、シーケンスパターンとは異なりそれ以外のキーは無視されると述べている。残りのキーを取り込みたい場合は **rest と書く必要があり、自動では rest に入らない。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.7 match 文、2026-09-30確認)
次の関数がある。def f(status): match status: case 400: return "Bad request" / case 401 | 403 | 404: return "Not allowed" / case _: return "Other"。f(403) と f(500) の戻り値の組はどれか。
答えと解説を見る
正解は「"Not allowed" と "Other"」である。公式チュートリアル4.7は、複数のリテラルを | (「or」)で組み合わせて1つのパターンにでき、case 401 | 403 | 404: が一例だと述べている。f(403) は 401・403・404 のいずれかに一致するので "Not allowed" を返す。f(500) はどの個別のパターンにも一致せず、最後の case _ がワイルドカードとして働くため "Other" を返す。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.7 match 文、2026-09-30確認)
x = 10 と書いたあと、def f(): x = 20 を定義して f() を呼び出し、続けて print(x) を実行した。表示される値と理由の組み合わせとして正しいものはどれか。
答えと解説を見る
正解は「10 が表示される。global 文で指定しない限り、関数の中の代入はグローバル変数を変えない」である。公式チュートリアル4.8は、関数の中ではグローバル変数や外側の関数の変数に、global 文や nonlocal 文で指定しない限り直接値を代入できない(参照はできる)と説明している。関数を実行するとローカル変数のための新たなシンボルテーブルが用意されるため、f() の中の x = 20 は関数のローカルな x への代入になり、外側の x は 10 のままである。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.8 関数を定義する、2026-09-30確認)
def greet(name): return "Hi " + name を定義したあと、say = greet を実行した。公式チュートリアル4.8の説明に沿った、この say について正しいものはどれか。
答えと解説を見る
正解は「say も greet と同じ関数オブジェクトを指し、say("A") で "Hi A" が得られる」である。公式チュートリアル4.8は、関数の定義を行うと関数名は関数オブジェクトとともに現在のシンボルテーブルに取り入れられ、他の名前も同じ関数オブジェクトを指すことができ、その関数にアクセスするために使用できると述べている。例として f = fib のあとに f(100) で呼び出せることを示している。名前が増えるだけで、関数オブジェクトは複製されず、元の名前も使い続けられる。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.8 関数を定義する、2026-09-30確認)
def first_negative(nums): の中で for n in nums: if n < 0: return n を書き、for ループに else: print("負の数なし") を付け、最後に return None とした。first_negative([3, -1, 2]) の結果を print() で表示し、続けて first_negative([3, 1, 2]) を呼び出した。出力として正しいものはどれか。
答えと解説を見る
正解は「-1 と "負の数なし" の2行が、この順で出力される」である。公式チュートリアル4.5は、ループが break によって終了した場合は else 句は実行されず、return や例外の発生によってループが途中で終了した場合にも else 節の実行はスキップされると述べている。1回目の呼び出しは -1 に達した時点で return するため else が実行されず、print() が -1 を表示する。2回目は負の数がなくループが最後まで進むので else が実行され、「負の数なし」が出力される。2回目の戻り値 None は print() で表示していないので出力されない。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.5 ループでの break 文、continue 文、else 節、2026-09-30確認)
公式チュートリアル4.5は、ループの else 句の働きを、別の構文の else 句にたとえて説明している。たとえられているのはどれか。
答えと解説を見る
正解は「try 文の else 句。例外が発生しなかったときに実行される」である。公式チュートリアル4.5は、ループの else 句は if 文の else よりも try 文の else に似ていると述べている。try 文の else 句は例外が発生しなかった時に実行され、ループの else 句は break されなかった場合に実行される。「条件が偽のとき」という if 文の else の感覚で読むと、break の有無で決まる実行条件を取り違えやすい。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.5 ループでの break 文、continue 文、else 節、2026-09-30確認)
公式チュートリアル4.10が挙げる命名の慣習として正しい組み合わせはどれか。
答えと解説を見る
正解は「クラス名は UpperCamelCase、関数名やメソッド名は lowercase_with_underscores」である。公式チュートリアル4.10は、慣習として UpperCamelCase をクラス名に、lowercase_with_underscores を関数名やメソッド名に使い、常に self をメソッドの第1引数の名前として使うことを挙げている。クラスと関数の書き方を入れ替えた選択肢や、第1引数を cls とした選択肢は、この記述と合わない。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.10 間奏曲: コーディングスタイル、2026-09-30確認)
コードを世界中の人に使ってもらうつもりで書く場合、文字のエンコーディングと識別子について公式チュートリアル4.10が述べている内容はどれか。
答えと解説を見る
正解は「Python のデフォルトである UTF-8 かプレーン ASCII を使い、他の言語を話す人が読む可能性があるなら非 ASCII 文字を識別子に使わない」である。公式チュートリアル4.10は、コードを世界中で使ってもらうつもりなら風変りなエンコーディングは使わず、Python のデフォルト UTF-8 またはプレーン ASCII が最も上手くいくと述べている。あわせて、他の言語を話す人がコードを読む可能性が少しでもあるなら、非 ASCII 文字を識別子に使うべきではないとしている。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 4.10 間奏曲: コーディングスタイル、2026-09-30確認)
公式チュートリアル4.1は、キーワード elif をどのように説明しているか。
答えと解説を見る
正解は「'else if' を短くしたもので、過剰なインデントを避けるのに役立つ」である。公式チュートリアル4.1は、ゼロ個以上の elif 部を使うことができ、else 部を付けることもできると述べたうえで、キーワード 'elif' は 'else if' を短くしたもので過剰なインデントを避けるのに役立つと説明している。一連の if ... elif ... elif ... は、他の言語における switch 文や case 文の代用にもなると書かれている。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール、2026-10-26確認)
次のコードを実行したときの出力はどれか。 x = 1 if x < 0: print('Negative') elif x == 0: print('Zero') elif x == 1: print('Single') else: print('More')
答えと解説を見る
正解は「Single」である。if ... elif ... elif ... else の連なりは、上から順に条件を調べ、最初に真になった節の本体だけを実行して全体を抜ける。x は 1 なので、x < 0 は偽、x == 0 も偽、3つ目の x == 1 が真になり、'Single' が表示される。それより後ろの else 部は実行されない。公式チュートリアル4.1は、ゼロ個以上の elif 部と、付けても付けなくてもよい else 部を持つこの形を説明している。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール、2026-10-26確認)
次のコードを実行したときの出力はどれか。 print(list(range(0, 10, 3)))
答えと解説を見る
正解は「[0, 3, 6, 9]」である。range(0, 10, 3) は、開始値 0 から 3 ずつ増やした値を、終端値 10 の手前まで生成する。0、3、6、9 の次は 12 になり、終端値 10 を超えるため生成されない。公式チュートリアル4.3は、list(range(0, 10, 3)) が [0, 3, 6, 9] になる例を示し、指定した終端値は生成されるシーケンスには入らないと述べている。ステップを省略すると 1 ずつ増えるが、第3引数で刻みを変えることもできる。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール、2026-10-26確認)
次のコードを実行したときの出力はどれか。 print(list(range(-10, -100, -30)))
答えと解説を見る
正解は「[-10, -40, -70]」である。range の増加量(ステップ)は負でもよく、range(-10, -100, -30) は -10 から 30 ずつ減らした値を、終端値 -100 に届く手前まで生成する。-10、-40、-70 の次は -100 になるが、終端値そのものは含まれないため生成されない。公式チュートリアル4.3は、この例が [-10, -40, -70] になることを示し、増加量は負でもよく「ステップ」と呼ばれることもあると述べている。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール、2026-10-26確認)
ユーザーの状態を保持した辞書 users を for 文で反復しながら、同じ辞書の内容を変更したい。公式チュートリアル4.2が述べる、扱いやすい方法はどれか。
答えと解説を見る
正解は「コレクションのコピーに対して反復処理をするか、新しいコレクションを作成する」である。公式チュートリアル4.2は、コレクションを反復処理しながら同じコレクションを変更するコードは正しく書くのが難しくなることがあり、通常はコレクションのコピーを反復処理するか、新しいコレクションを作成する方が簡単だと述べている。例として、users.copy().items() のようにコピーに対して反復する書き方を示している。コレクションを書き換えながら回すと、どの要素まで処理したかを追いにくくなるため、元のコレクションは触らずに済む形に整えるのが読みやすさの面でも有利になる。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール、2026-10-26確認)
新しい関数の中身をまだ書かず、後で実装するまでの仮置きにしたい。公式チュートリアル4.6が示す書き方はどれか。
答えと解説を見る
正解は「関数の本体に pass 文を書いておく」である。公式チュートリアル4.6は、pass 文は何もせず、文を書くことが構文上要求されているがプログラム上何の動作もする必要がないときに使うと述べ、そのもう1つの使い道として、新しいコードを書いているときの関数や条件文の仮置きの本体を挙げている。例として def initlog(*args): の本体に pass を書き、あとで実装することを忘れないようにする書き方が示されている。未実装の関数でも構文上は本体が必須なので、pass を置けばプログラム全体を実行できる状態のまま、あとから中身を書き足していける。
https://docs.python.org/ja/3/tutorial/controlflow.html (Python公式チュートリアル 第4章 制御構造ツール、2026-10-26確認)