AI資格ドリル
資格を選ぶ

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インタープリタの使い方は何問収録されていますか?

A

現在10問を収録しています。内訳は基礎6問・標準3問・応用1問です。

Q第2章 Pythonインタープリタの使い方の頻出論点は何ですか?

A

ソースコードの文字コード、コマンドライン引数とsys.argv、起動時のオプション(-c/-m/-i)、対話モードのプロンプト、インタプリタの終了方法、スクリプトの実行方法(ファイル引数/標準入力)などが出題対象です(当サイト収録問題に基づく編集部集計)。

Q間違えた問題はどう復習すればいいですか?

A

誤答した選択肢のどこがずれていたかを解説で確認し、関連用語がある場合は用語集で定義に戻ってから再演習することをおすすめします。

第1問 ・ ソースコードの文字コード

Pythonのソースファイルに文字コードを指定する特別なコメントがない場合、公式チュートリアル上でデフォルトとして扱われるエンコーディングはどれか。

  • アASCII
  • イ実行環境のプラットフォーム既定値
  • ウUTF-8
  • エUTF-16
答えと解説を見る
ウUTF-8正解
解説

正解は「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インタープリタの使い方)

問題番号: py3b-043
問題番号 py3b-043 の誤りを報告する
第2問 ・ コマンドライン引数とsys.argv

Pythonインタプリタの起動方法とsys.argv[0]の対応関係について、公式チュートリアルの説明に合うものはどれか。

  • アpython -c "print('hi there')" のように-cオプションでコマンド文字列を実行した場合、sys.argv[0]は'-c'になる
  • イpython -m json.tool のように-mオプションでモジュールを実行した場合、sys.argv[0]は常に空文字列になる
  • ウ標準入力からスクリプトを読み込むために'-'を指定した場合、sys.argv[0]は標準入力の内容そのものになる
  • エスクリプト名も引数も指定せずに起動した場合、sys.argvは要素を一つも持たない空のリストになる
答えと解説を見る
アpython -c "print('hi there')" のように-cオプションでコマンド文字列を実行した場合、sys.argv[0]は'-c'になる正解
解説

正解は「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インタープリタの使い方)

問題番号: py3b-059
問題番号 py3b-059 の誤りを報告する
第3問 ・ 起動時のオプション(-c/-m/-i)

文字列で書いた1行のPython文をその場で実行したいとき、シェルの特殊文字を含む場合の公式チュートリアルの推奨に合う起動方法はどれか。

  • アpython -m "print('hi there')" のように-mオプションへ直接コマンド文字列を渡す
  • イpython -c 'print("hi there")' のように command 全体をクォートで囲んでから -c オプションに渡す
  • ウpython -c print("hi there") のようにクォートを付けずに -c オプションへ渡す
  • エpython -i print("hi there") のように -i オプションでコマンド文字列を渡す
答えと解説を見る
イpython -c 'print("hi there")' のように command 全体をクォートで囲んでから -c オプションに渡す正解
解説

正解は「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インタープリタの使い方)

問題番号: py3b-060
問題番号 py3b-060 の誤りを報告する
第4問 ・ 対話モードのプロンプト

Pythonの対話的インタプリタでif文などの複数行にわたる構文を入力しているとき、継続行に表示される記号について公式チュートリアルの説明に合うものはどれか。

  • ア一次プロンプトの'>>>'がそのまま繰り返し表示され続ける
  • イ継続行にはプロンプトが一切表示されない
  • ウ継続行では二次プロンプトが表示され、デフォルトでは三つのドット'...'である
  • エ継続行には'###'が二次プロンプトとして表示される
答えと解説を見る
ウ継続行では二次プロンプトが表示され、デフォルトでは三つのドット'...'である正解
解説

正解は「継続行では二次プロンプトが表示され、デフォルトでは三つのドット'...'である」である。公式チュートリアルは、対話モードでは一次プロンプト(通常は三つの大なり記号'>>>')でコマンド入力を促し、if文などの複数行にわたる構文を入力する際の継続行では二次プロンプトを表示すると説明している。二次プロンプトはデフォルトでは三つのドット'...'である。したがって、継続行でも一次プロンプトがそのまま繰り返される、継続行にはプロンプトが一切表示されない、'###'が二次プロンプトになるという説明はいずれも公式の記載と一致しない。

https://docs.python.org/ja/3/tutorial/interpreter.html (Python公式チュートリアル 第2章 Pythonインタープリタの使い方)

問題番号: py3b-061
問題番号 py3b-061 の誤りを報告する
第5問 ・ インタプリタの終了方法

対話的インタプリタを一次プロンプト'>>>'から終了させる方法として、公式チュートリアルの説明に合うものはどれか。

  • アファイル終端文字はUnix・Windowsのどちらでも同じCtrl+Cである
  • イquit()と入力してもインタプリタは終了できず、必ずファイル終端文字が必要である
  • ウ対話的インタプリタを終了させる方法は用意されていない
  • エUnixではファイル終端文字としてCtrl+Dを、DOS/WindowsではCtrl+Zを一次プロンプトに入力するとステータス0で終了する
答えと解説を見る
エUnixではファイル終端文字としてCtrl+Dを、DOS/WindowsではCtrl+Zを一次プロンプトに入力するとステータス0で終了する正解
解説

正解は「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インタープリタの使い方)

問題番号: py3b-062
問題番号 py3b-062 の誤りを報告する
第6問 ・ ソースコードの文字コード

Pythonのソースコードの文字コードに関する公式チュートリアルの説明として正しいものはどれか。

  • アUTF-8では世界中のほとんどの言語の文字を文字列リテラル・識別子・コメントに同時に書けるが、標準ライブラリは識別子にASCII文字のみを利用しており、ポータブルなコードもその慣習に従うべきだとされている
  • イUTF-8は文字列リテラルにのみ利用でき、識別子やコメントには常にASCII文字しか使えない
  • ウ標準ライブラリはUTF-8の識別子を積極的に採用しており、ポータブルなコードも多言語の識別子を使うことが推奨されている
  • エUTF-8を使う場合、コメントには日本語などの非ASCII文字を書くことができない
答えと解説を見る
アUTF-8では世界中のほとんどの言語の文字を文字列リテラル・識別子・コメントに同時に書けるが、標準ライブラリは識別子にASCII文字のみを利用しており、ポータブルなコードもその慣習に従うべきだとされている正解
解説

正解は「UTF-8では世界中のほとんどの言語の文字を文字列リテラル・識別子・コメントに同時に書けるが、標準ライブラリは識別子にASCII文字のみを利用しており、ポータブルなコードもその慣習に従うべきだとされている」である。公式チュートリアル2.2.1は、デフォルトのUTF-8エンコーディングにより世界中のほとんどの言語の文字を文字列リテラル・識別子・コメントなどに同時に書けると説明する一方で、標準ライブラリ自体は識別子にASCII文字のみを利用しており、他のポータブルなコードもその慣習に従うべきだと述べている。したがって「UTF-8で書けること」と「標準ライブラリが実際にどう書いているか」は別の話であり、両方を正しく押さえる必要がある。

https://docs.python.org/ja/3/tutorial/interpreter.html (Python公式チュートリアル 第2章 Pythonインタプリタを使う)

問題番号: py3b-105
問題番号 py3b-105 の誤りを報告する
第7問 ・ コマンドライン引数とsys.argv

python -m mymodule --verbose のように -m オプションの後ろに追加の引数を指定した場合の挙動として、公式チュートリアルの説明に合うものはどれか。

  • ア-mオプションの後ろに指定した引数はインタープリタ自身のオプションとして解釈され、エラーになる
  • イ-mオプションの後ろの引数はsys.argvには格納されず、モジュール側から参照する方法はない
  • ウ-mオプションの後ろの引数は自動的にモジュール名の一部として結合される
  • エPythonインタープリタは-mモジュール名の後ろに指定したオプション(--verboseなど)を無視するが、無視された引数はsys.argvを使ってmoduleから参照できる
答えと解説を見る
エPythonインタープリタは-mモジュール名の後ろに指定したオプション(--verboseなど)を無視するが、無視された引数はsys.argvを使ってmoduleから参照できる正解
解説

正解は「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インタプリタを使う)

問題番号: py3b-106
問題番号 py3b-106 の誤りを報告する
第8問 ・ 対話モードのプロンプト

Pythonを対話モードで起動したときに一次プロンプト(>>>)が表示されるまでの流れとして、公式チュートリアルの説明に合うものはどれか。

  • ア一次プロンプトが最初に表示され、その後にバージョン番号と著作権表示が出力される
  • イバージョン番号と著作権表示から始まる起動メッセージが出力されたあとに、一次プロンプトが表示される
  • ウ起動メッセージは表示されず、いきなり一次プロンプトが表示される
  • エバージョン番号は表示されるが著作権表示はデフォルトでは出力されない
答えと解説を見る
イバージョン番号と著作権表示から始まる起動メッセージが出力されたあとに、一次プロンプトが表示される正解
解説

正解は「バージョン番号と著作権表示から始まる起動メッセージが出力されたあとに、一次プロンプトが表示される」である。公式チュートリアル2.1.2は、インタプリタが命令を端末やコマンドプロンプトから読み取っている場合を対話モードと呼び、このモードでは最初のプロンプトを出す前に、バージョン番号と著作権表示から始まる起動メッセージを出力すると説明している。その後にはじめて一次プロンプト(通常は三つの大なり記号'>>>')が表示され、ユーザにコマンドの入力を促す。したがって一次プロンプトが起動メッセージより先に表示されるわけでも、起動メッセージ自体が省略されるわけでも、著作権表示だけが出力されないわけでもない。

https://docs.python.org/ja/3/tutorial/interpreter.html (Python公式チュートリアル 第2章 Pythonインタプリタを使う)

問題番号: py3b-107
問題番号 py3b-107 の誤りを報告する
第9問 ・ スクリプトの実行方法(ファイル引数/標準入力)

`python3 < script.py` のようにリダイレクトを使ってPythonインタープリタを起動した場合の説明として、公式チュートリアルの記述に合うものはどれか。

  • ア標準入力からのリダイレクトはPythonインタープリタでは使用できず、必ずファイル名を直接引数に渡す必要がある
  • イ標準入力に接続された内容は常に対話モードとして1行ずつプロンプト付きで実行される
  • ウファイル名を引数に指定する場合と同様に、標準入力ファイルとして指定するとインタープリタはそこからスクリプトを読み込んで実行する
  • エリダイレクトを使うとPythonは構文エラーを出して起動に失敗する
答えと解説を見る
ウファイル名を引数に指定する場合と同様に、標準入力ファイルとして指定するとインタープリタはそこからスクリプトを読み込んで実行する正解
解説

正解は「ファイル名を引数に指定する場合と同様に、標準入力ファイルとして指定するとインタープリタはそこからスクリプトを読み込んで実行する」である。公式チュートリアル2.1は、インタプリタはUnixシェルと同じように使え、ファイル名を引数に指定するか`python3 < filename`のように標準入力ファイルとして指定すると、インタプリタはファイルからスクリプトを読み込んで実行すると説明している。標準入力が端末に接続された状態でのみ対話的に読み込みが行われるのであり、リダイレクトされた標準入力はスクリプトとして扱われる。

https://docs.python.org/ja/3/tutorial/interpreter.html (Python公式チュートリアル 第2章 Pythonインタプリタを使う)

問題番号: py3b-108
問題番号 py3b-108 の誤りを報告する
第10問 ・ Pythonインタプリタの起動コマンド名

Unix環境でPython 3系のインタープリタを実行する際のコマンド名について、公式チュートリアルの脚注の説明に合うものはどれか。

  • アUnixでは Python 3.x インタープリタの実行ファイルはデフォルトでは python という名前ではインストールされず、これは同時にインストールされたPython 2.x実行ファイルとの衝突を避けるためである
  • イUnixでは python3 という名前のコマンドは存在せず、常に python コマンドでPython 3系が起動する
  • ウPython 2.xとPython 3.xは同じ実行ファイル名を共有しても衝突しないよう設計されている
  • エUnix環境ではPythonのバージョンを区別するコマンド名の慣習は存在しない
答えと解説を見る
アUnixでは Python 3.x インタープリタの実行ファイルはデフォルトでは python という名前ではインストールされず、これは同時にインストールされたPython 2.x実行ファイルとの衝突を避けるためである正解
解説

正解は「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インタプリタを使う)

問題番号: py3b-109
問題番号 py3b-109 の誤りを報告する

執筆: AI資格ドリル編集部(運営者情報を見る)