Python3エンジニア認定基礎試験 第2章 Pythonインタープリタの使い方 予想問題と解説
Python3エンジニア認定基礎試験「第2章 Pythonインタープリタの使い方」の予想問題を10問収録しています。各問を解説つきで掲載し、全問は演習画面で解けます。出題は公式シラバスの範囲内です。
この章の要点
ソースコードの文字コード、コマンドライン引数とsys.argv、起動時のオプション(-c/-m/-i)、対話モードのプロンプト、インタプリタの終了方法、スクリプトの実行方法(ファイル引数/標準入力)などを扱う分野です。全10問(基礎6問・標準3問・応用1問)を収録しています。
- ソースコードの文字コード
- コマンドライン引数とsys.argv
- 起動時のオプション(-c/-m/-i)
- 対話モードのプロンプト
- インタプリタの終了方法
- スクリプトの実行方法(ファイル引数/標準入力)
- Pythonインタプリタの起動コマンド名
情報源と編集区分
公式範囲を確認し、問題数・難易度・確認点は当サイトが集計・編集。
試験概要(公式)確認しておきたいポイント
当サイトの作問時に観察した、取り違えやすい論点です(公式の統計ではありません)。
- Pythonソースコードの既定UTF-8と、open()で扱うテキストファイルのプラットフォーム依存な既定エンコーディングの混同。shebangを先頭行に置く場合、ソースコードのエンコーディング宣言は2行目に置く。
よくある質問
Q第2章 Pythonインタープリタの使い方は何問収録されていますか?
現在10問を収録しています。内訳は基礎6問・標準3問・応用1問です。
Q第2章 Pythonインタープリタの使い方の頻出論点は何ですか?
ソースコードの文字コード、コマンドライン引数とsys.argv、起動時のオプション(-c/-m/-i)、対話モードのプロンプト、インタプリタの終了方法、スクリプトの実行方法(ファイル引数/標準入力)などが出題対象です(当サイト収録問題に基づく編集部集計)。
Q間違えた問題はどう復習すればいいですか?
誤答した選択肢のどこがずれていたかを解説で確認し、関連用語がある場合は用語集で定義に戻ってから再演習することをおすすめします。
Pythonのソースファイルに文字コードを指定する特別なコメントがない場合、公式チュートリアル上でデフォルトとして扱われるエンコーディングはどれか。
答えと解説を見る
正解は「UTF-8」である。公式チュートリアル2.2.1は、PythonのソースファイルはデフォルトではUTF-8でエンコードされているものとして扱われると説明している。標準ライブラリの名前にはASCII文字を使う一方、文字列リテラルやコメントには多くの言語の文字を同時に記述できる。デフォルト以外のエンコーディングを使う場合は、ファイルの先頭行に特別なコメントを追加する。先頭行をUNIXのshebangにする場合は、エンコーディング宣言を2行目に置く。したがって、宣言がない場合をASCII、UTF-16、またはプラットフォーム既定値として扱うという選択肢はいずれも公式チュートリアルの説明と一致しない。ファイル入出力時の既定エンコーディングと、ソースコード自体の既定エンコーディングを混同しないことが判断点である。
https://docs.python.org/ja/3/tutorial/interpreter.html (Python公式チュートリアル 第2章 Pythonインタープリタの使い方)
Pythonインタプリタの起動方法とsys.argv[0]の対応関係について、公式チュートリアルの説明に合うものはどれか。
答えと解説を見る
正解は「python -c "print('hi there')" のように-cオプションでコマンド文字列を実行した場合、sys.argv[0]は'-c'になる」である。公式チュートリアルは、-c commandの形式でPython文を直接実行でき、この場合sys.argv[0]は'-c'になると説明している。-mオプションでモジュールを実行した場合はsys.argv[0]がモジュールのフルパスになり、常に空文字列になるわけではない。標準入力からの読み込みのために'-'を指定した場合、sys.argv[0]は文字列'-'そのものであり、標準入力の内容が入るわけではない。また、スクリプト名も引数も指定しない場合でもsys.argvには少なくとも一つの要素(空文字列のargv[0])が入っており、空のリストにはならない。
https://docs.python.org/ja/3/tutorial/interpreter.html (Python公式チュートリアル 第2章 Pythonインタープリタの使い方)
文字列で書いた1行のPython文をその場で実行したいとき、シェルの特殊文字を含む場合の公式チュートリアルの推奨に合う起動方法はどれか。
答えと解説を見る
正解は「python -c 'print("hi there")' のように command 全体をクォートで囲んでから -c オプションに渡す」である。公式チュートリアルは、-c command [arg] ...の形式でPython文を直接実行できるが、commandにシェルの特殊文字(スペースなど)が含まれるため、command全体をクォートで囲むべきだと説明している。-mオプションはコマンド文字列ではなくモジュールをスクリプトとして実行するためのものであり、コマンド文字列を直接渡す用途ではない。クォートを付けずに-cへ渡すと、シェルがスペースなどを区切りとして解釈してしまう。-iフラグはスクリプトの実行後に対話モードへ入るためのオプションであり、コマンド文字列を渡す方法ではない。
https://docs.python.org/ja/3/tutorial/interpreter.html (Python公式チュートリアル 第2章 Pythonインタープリタの使い方)
Pythonの対話的インタプリタでif文などの複数行にわたる構文を入力しているとき、継続行に表示される記号について公式チュートリアルの説明に合うものはどれか。
答えと解説を見る
正解は「継続行では二次プロンプトが表示され、デフォルトでは三つのドット'...'である」である。公式チュートリアルは、対話モードでは一次プロンプト(通常は三つの大なり記号'>>>')でコマンド入力を促し、if文などの複数行にわたる構文を入力する際の継続行では二次プロンプトを表示すると説明している。二次プロンプトはデフォルトでは三つのドット'...'である。したがって、継続行でも一次プロンプトがそのまま繰り返される、継続行にはプロンプトが一切表示されない、'###'が二次プロンプトになるという説明はいずれも公式の記載と一致しない。
https://docs.python.org/ja/3/tutorial/interpreter.html (Python公式チュートリアル 第2章 Pythonインタープリタの使い方)
対話的インタプリタを一次プロンプト'>>>'から終了させる方法として、公式チュートリアルの説明に合うものはどれか。
答えと解説を見る
正解は「Unixではファイル終端文字としてCtrl+Dを、DOS/WindowsではCtrl+Zを一次プロンプトに入力するとステータス0で終了する」である。公式チュートリアルは、一次プロンプトにファイル終端文字(UnixはCtrl+D、DOS/WindowsはCtrl+Z)を入力するとインタプリタがステータス0で終了すると説明し、これがうまく働かない場合はquit()コマンドでも終了できると補足している。したがって、ファイル終端文字がUnix・Windowsで同じCtrl+Cであるという説明、quit()では終了できないという説明、終了方法が用意されていないという説明は、いずれも公式の記載と一致しない。
https://docs.python.org/ja/3/tutorial/interpreter.html (Python公式チュートリアル 第2章 Pythonインタープリタの使い方)
Pythonのソースコードの文字コードに関する公式チュートリアルの説明として正しいものはどれか。
答えと解説を見る
正解は「UTF-8では世界中のほとんどの言語の文字を文字列リテラル・識別子・コメントに同時に書けるが、標準ライブラリは識別子にASCII文字のみを利用しており、ポータブルなコードもその慣習に従うべきだとされている」である。公式チュートリアル2.2.1は、デフォルトのUTF-8エンコーディングにより世界中のほとんどの言語の文字を文字列リテラル・識別子・コメントなどに同時に書けると説明する一方で、標準ライブラリ自体は識別子にASCII文字のみを利用しており、他のポータブルなコードもその慣習に従うべきだと述べている。したがって「UTF-8で書けること」と「標準ライブラリが実際にどう書いているか」は別の話であり、両方を正しく押さえる必要がある。
https://docs.python.org/ja/3/tutorial/interpreter.html (Python公式チュートリアル 第2章 Pythonインタプリタを使う)
python -m mymodule --verbose のように -m オプションの後ろに追加の引数を指定した場合の挙動として、公式チュートリアルの説明に合うものはどれか。
答えと解説を見る
正解は「Pythonインタープリタは-mモジュール名の後ろに指定したオプション(--verboseなど)を無視するが、無視された引数はsys.argvを使ってmoduleから参照できる」である。公式チュートリアル2.1.1は、-c commandや-m moduleの後ろに指定したオプションをPythonインタープリタ自体は無視すると説明しており、それらの無視された引数はsys.argvを通じてcommandやmoduleの側から参照できるとしている。つまりインタープリタ自身のオプションとしてエラーになったり、参照する方法がなかったりするわけではなく、モジュール名の一部に結合されるわけでもない。
https://docs.python.org/ja/3/tutorial/interpreter.html (Python公式チュートリアル 第2章 Pythonインタプリタを使う)
Pythonを対話モードで起動したときに一次プロンプト(>>>)が表示されるまでの流れとして、公式チュートリアルの説明に合うものはどれか。
答えと解説を見る
正解は「バージョン番号と著作権表示から始まる起動メッセージが出力されたあとに、一次プロンプトが表示される」である。公式チュートリアル2.1.2は、インタプリタが命令を端末やコマンドプロンプトから読み取っている場合を対話モードと呼び、このモードでは最初のプロンプトを出す前に、バージョン番号と著作権表示から始まる起動メッセージを出力すると説明している。その後にはじめて一次プロンプト(通常は三つの大なり記号'>>>')が表示され、ユーザにコマンドの入力を促す。したがって一次プロンプトが起動メッセージより先に表示されるわけでも、起動メッセージ自体が省略されるわけでも、著作権表示だけが出力されないわけでもない。
https://docs.python.org/ja/3/tutorial/interpreter.html (Python公式チュートリアル 第2章 Pythonインタプリタを使う)
`python3 < script.py` のようにリダイレクトを使ってPythonインタープリタを起動した場合の説明として、公式チュートリアルの記述に合うものはどれか。
答えと解説を見る
正解は「ファイル名を引数に指定する場合と同様に、標準入力ファイルとして指定するとインタープリタはそこからスクリプトを読み込んで実行する」である。公式チュートリアル2.1は、インタプリタはUnixシェルと同じように使え、ファイル名を引数に指定するか`python3 < filename`のように標準入力ファイルとして指定すると、インタプリタはファイルからスクリプトを読み込んで実行すると説明している。標準入力が端末に接続された状態でのみ対話的に読み込みが行われるのであり、リダイレクトされた標準入力はスクリプトとして扱われる。
https://docs.python.org/ja/3/tutorial/interpreter.html (Python公式チュートリアル 第2章 Pythonインタプリタを使う)
Unix環境でPython 3系のインタープリタを実行する際のコマンド名について、公式チュートリアルの脚注の説明に合うものはどれか。
答えと解説を見る
正解は「Unixでは Python 3.x インタープリタの実行ファイルはデフォルトでは python という名前ではインストールされず、これは同時にインストールされたPython 2.x実行ファイルとの衝突を避けるためである」である。公式チュートリアル2.1の脚注は、Unix環境においてPython 3.xの実行ファイルがデフォルトで`python`という名前ではインストールされない理由を、同時にインストールされたPython 2.x実行ファイルとの衝突を避けるためだと説明している。したがって`python3`のようにバージョンを含んだコマンド名が使われるのであり、`python`コマンドで常にPython 3系が起動するわけでも、衝突しない設計になっているわけでも、命名の慣習が存在しないわけでもない。
https://docs.python.org/ja/3/tutorial/interpreter.html (Python公式チュートリアル 第2章 Pythonインタプリタを使う)