Python3エンジニア認定基礎試験 ⑧ 標準ライブラリ・仮想環境・総仕上げ

Pythonに標準で付属する豊富なライブラリを一通り学ぶ、総仕上げの分野です。os・globによるファイル操作、sys.argvでのコマンドライン引数取得、argparseによる引数解析、math・random・statisticsといった数値・統計処理、urllib.requestによるネットワークアクセス、datetimeによる日時処理が頻出です。各関数の役割と戻り値、存在しない関数を呼んだときのAttributeErrorなどが問われます。範囲は広いものの、代表的なモジュールと主要関数の対応を一覧で押さえれば効率よく得点できます。あわせてPEP 8の総復習も行いましょう。出題数40問。

この分野の問題40問を、選択肢・正解・解説つきで掲載しています。まず自分で解答を考えてから「正解と解説を見る」を開いて答え合わせをしてください。

クイズモードで挑戦 →

263osモジュールにおいて、カレントディレクトリを取得する関数と移動する関数の正しい組み合わせはどれか。

  1. Aos.pwd() と os.cd()
  2. Bos.getcwd() と os.chdir()
  3. Cos.getcwd() と os.cd()
  4. Dos.pwd() と os.chdir()
正解と解説を見る

正解:Bos.getcwd() と os.chdir()

osモジュールではos.getcwd()でカレントディレクトリを取得しos.chdir()で移動します。

この問題の解説ページを開く →

264osモジュールに関する説明として正しいものはどれか。

  1. ALinuxのコマンドに合わせてos.pwd()という関数が用意されている。
  2. Bosモジュールには os.pwd() や os.cd() という関数は存在しない。
  3. CLinuxのコマンドに合わせてos.cd()という関数が用意されている。
  4. Dos.getcwd()の引数に移動先のディレクトリを指定する。
正解と解説を見る

正解:Bosモジュールには os.pwd() や os.cd() という関数は存在しない。

LinuxなどのOSコマンドとは異なり、osモジュールにos.pwd()やos.cd()という関数は存在しません。

この問題の解説ページを開く →

265globモジュールを使って、カレントディレクトリにある拡張子が「.py」であるファイル名のリストを取得する正しい方法はどれか。

  1. Aglob.glob(".py")
  2. Bglob.glob(".*.py")
  3. Cglob.glob("?.py")
  4. Dglob.glob("*.py")
正解と解説を見る

正解:Dglob.glob("*.py")

glob.glob('*.py')と指定することで、拡張子が.pyのファイルリストを取得できます。

この問題の解説ページを開く →

266glob.glob(パターン)において、ワイルドカードを意味する文字「*」の挙動として正しいものはどれか。

  1. A任意の1文字にのみマッチする。
  2. B「.」で始まるファイル名を含むすべてのファイル名にマッチする。
  3. C拡張子の部分にのみマッチする。
  4. D任意の文字の並びにマッチするが「.」で始まるファイルには対応しない。
正解と解説を見る

正解:D任意の文字の並びにマッチするが「.」で始まるファイルには対応しない。

ワイルドカードの*は任意の文字の並びにマッチしますが、「.」で始まるファイルには対応しません。

この問題の解説ページを開く →

267globモジュールに存在しない、または実行するとAttributeErrorになる関数はどれか。

  1. Aglob.glob()
  2. Bglob.escape()
  3. Cglob.findall()
  4. Dglob.iglob()
正解と解説を見る

正解:Cglob.findall()

globモジュールにglob.findall()という関数は存在しないためAttributeErrorになります。

この問題の解説ページを開く →

268sysモジュールを使ってコマンドライン引数をリストとして取得する属性はどれか。

  1. Asys.argument
  2. Bsys.args
  3. Csys.argv
  4. Dsys.iter
正解と解説を見る

正解:Csys.argv

コマンドライン引数はsys.argv属性を使ってリストで取得できます。

この問題の解説ページを開く →

269「python check.py 1 2」を実行したとき、sys.argvの中身はどのようになるか。

  1. A['1', '2']
  2. B['python', 'check.py', '1', '2']
  3. C'check.py 1 2'
  4. D['check.py', '1', '2']
正解と解説を見る

正解:D['check.py', '1', '2']

sys.argvの最初の要素はプログラム名(check.py)になり、その後に引数が続きます。

この問題の解説ページを開く →

270argparseモジュールにおいて、add_argument()の引数に指定することで「1個以上」の任意形式の引数を指定できる設定はどれか。

  1. Anargs="*"
  2. Bnargs="+"
  3. Cnargs="?"
  4. Dnargs="1"
正解と解説を見る

正解:Bnargs="+"

nargs='+'を指定することで、1個以上の任意形式の引数を指定できます。

この問題の解説ページを開く →

271「print(math.log(16, 2))」を実行した結果として正しいものはどれか。

  1. A4
  2. B4.0
  3. C8
  4. D8.0
正解と解説を見る

正解:B4.0

log(値, 底)は底のn乗が値となるnを返すため、16は2の4乗なので4.0(浮動小数点数)となります。

この問題の解説ページを開く →

272mathモジュールに定義されている定数「pi」の出力結果として正しいものはどれか。

  1. A3.14
  2. B3.14159265358979323846
  3. C3.1416
  4. D3.141592653589793
正解と解説を見る

正解:D3.141592653589793

math.piの出力は3.141592653589793となります。

この問題の解説ページを開く →

273math.tauの値を「小数第3位で丸めて表示」したい場合、f文字列のフォーマット指定子として正しいものはどれか。

  1. A{math.tau:.3f}
  2. B{math.tau:3}
  3. C{math.tau:3f}
  4. D{math.tau:.3}
正解と解説を見る

正解:A{math.tau:.3f}

小数第3位で丸めて表示するには、フォーマット指定子として「:.3f」を使用します。

この問題の解説ページを開く →

274random.choice(range(10))をfor文で10回繰り返して出力した場合の挙動として正しいものはどれか。

  1. A数字の0から9のうち重複を許して10個がランダムに出力される。
  2. B数字の0から9の10個が順番に出力される。
  3. C数字の0から9の10個が重複せずにランダムな順番で出力される。
  4. D数字の0から9のうち1個だけが10回連続で出力される。
正解と解説を見る

正解:A数字の0から9のうち重複を許して10個がランダムに出力される。

random.choice()は過去の出力に関係なく選ぶため、10回の出力の中で重複する可能性があります。

この問題の解説ページを開く →

275random.random()関数に関する説明として正しいものはどれか。

  1. A0以上1未満のランダムな値(小数)を返し引数は指定できない。
  2. B引数に最大値を指定することで0以上指定値未満の乱数を返す。
  3. C引数に最小値と最大値を指定してその範囲の整数を返す。
  4. D-1以上1未満のランダムな値を返し引数は指定できない。
正解と解説を見る

正解:A0以上1未満のランダムな値(小数)を返し引数は指定できない。

random.random()関数は0以上1未満のランダムな小数を返し、引数を指定することはできません。

この問題の解説ページを開く →

276randomモジュールを用いて「-1以上1未満の乱数」を作成するコードとして最も適切なものはどれか。

  1. Arandom.random() * 2 - 1
  2. Brandom.random() - 1
  3. Crandom.random(2) - 1
  4. Drandom.random(-1, 1)
正解と解説を見る

正解:Arandom.random() * 2 - 1

random.random()*2で0以上2未満になり、そこから1を引くことで-1以上1未満の値になります。

この問題の解説ページを開く →

277statisticsモジュールにおいて、データの中央値を求める関数はどれか。

  1. Astatistics.mean()
  2. Bstatistics.variance()
  3. Cstatistics.mode()
  4. Dstatistics.median()
正解と解説を見る

正解:Dstatistics.median()

中央値を計算するのはstatistics.median()です。

この問題の解説ページを開く →

278statisticsモジュールを用いて「[-1, -1, -1, -1, 4]」の平均を求めた場合の結果はどれか。

  1. A-1
  2. B1
  3. C0
  4. D4
正解と解説を見る

正解:C0

平均はデータの合計値を個数で割るため、(-1-1-1-1+4)/5 = 0 となります。

この問題の解説ページを開く →

279statisticsモジュールを用いて「[-1, -1, -1, -1, 4]」の不偏分散(variance)を求めた場合の結果はどれか。

  1. A0
  2. B-1
  3. C4
  4. D5
正解と解説を見る

正解:D5

不偏分散は平均との差の2乗の和を「データ数 - 1」で割るため、(1+1+1+1+16)/(5-1) = 5 となります。

この問題の解説ページを開く →

280urllib.request.urlopen()関数が対象のデータを取得する際のモードとして正しいものはどれか。

  1. Aテキストモード
  2. Bバイナリモード
  3. C文字列モード
  4. D追記モード
正解と解説を見る

正解:Bバイナリモード

urlopen()は対象のデータをバイナリモードで取得するため、文字列にするにはdecode()で変換する必要があります。

この問題の解説ページを開く →

281urllib.requestモジュールに存在しない関数はどれか。

  1. Aurllib.request.geturl
  2. Burllib.request.open
  3. Cすべての選択肢の関数が存在しない
  4. Durllib.request.openurl
正解と解説を見る

正解:Cすべての選択肢の関数が存在しない

urllib.requestモジュールにはgeturl()、open()、openurl()という関数は存在しません。

この問題の解説ページを開く →

282datetime型のオブジェクト「dt = datetime(2000, 12, 31)」を「2000-12-31」という形式の文字列で表示するための記述はどれか。

  1. Adt.strftime("2000, 12, 31")
  2. Bdt.strftime("%Y-%m-%d")
  3. Cdt.strftime("(year)-(month)-(day)")
  4. Ddt.strftime("%y-%m-%d")
正解と解説を見る

正解:Bdt.strftime("%Y-%m-%d")

4桁の年、0詰めの2桁の月、0詰めの2桁の日に変換するには「%Y-%m-%d」を指定します。

この問題の解説ページを開く →

283date(2002, 2, 2) と date(2001, 1, 1) の差分を引き算で求めたオブジェクトから、日数部分(397)を取得するための属性はどれか。

  1. Aday
  2. Bdays
  3. Cget_days
  4. Dtotal_days
正解と解説を見る

正解:Bdays

日付の差分を表すオブジェクトから日数部分を取得するには「days」属性を使用します。

この問題の解説ページを開く →

284unittestモジュールによる単体テストにおいて、テスト対象の実行結果(actual)と期待する結果(expected)が同じであることを確認するメソッドはどれか。

  1. Aself.assertEqual(actual, expected)
  2. Bassert(actual == expected)
  3. CassertEqual(actual, expected)
  4. Dself.assert(actual == expected)
正解と解説を見る

正解:Aself.assertEqual(actual, expected)

TestCaseクラスを継承したメソッド内で、結果が同じか確認するには「self.assertEqual(actual, expected)」を使います。

この問題の解説ページを開く →

285unittestのテストコード内で、self.assertEqualの代わりにキーワードである「assert」を用いて「self.assert(actual == expected)」と記述した場合、どうなるか。

  1. A正常に単体テストとして実行できる。
  2. Bテストに失敗したときに差異を確認できなくなる。
  3. C構文エラー(SyntaxError)になる。
  4. DAssertionErrorが正しく発生する。
正解と解説を見る

正解:C構文エラー(SyntaxError)になる。

assertはPythonのキーワードであるため、「self.assert」と書くと構文エラーになります。

この問題の解説ページを開く →

286pprintモジュールのpprint()関数が、リストなどのデータを出力する際に要素ごとに改行を行う基準はどれか。

  1. A要素が3個以上あるとき
  2. B要素の文字列に空白が含まれるとき
  3. C常に要素ごとに改行する
  4. D1行が80文字を超えると判断されたとき
正解と解説を見る

正解:D1行が80文字を超えると判断されたとき

pprint()関数は、1行が80文字を超えると要素ごとに改行して出力します。

この問題の解説ページを開く →

287textwrapモジュールのfill()関数に「width=24」を指定して実行した場合の挙動として正しいものはどれか。

  1. A指定した幅(24文字)に収まるように文字列を整形(改行)する。
  2. B24文字ごとに必ず読点を挿入する。
  3. C文字列全体の長さを24文字に制限して切り捨てる。
  4. D1行の最初のインデントを24文字分空ける。
正解と解説を見る

正解:A指定した幅(24文字)に収まるように文字列を整形(改行)する。

textwrap.fill(文字列, width=値)を使うと、指定した幅に収まるように改行を含めて整形します。

この問題の解説ページを開く →

288仮想環境(venv)についての説明として正しいものはどれか。

  1. A仮想環境で使うPythonのバージョンは作成時に指定できない。
  2. BOSに複数バージョンのPythonが導入されていれば仮想環境作成時にバージョンを指定できる。
  3. C仮想環境の作成場所(ディレクトリ名)はコマンドラインで省略できる。
  4. D1つの仮想環境でパッケージのバージョンを変更すると他のすべての仮想環境のバージョンも変更される。
正解と解説を見る

正解:BOSに複数バージョンのPythonが導入されていれば仮想環境作成時にバージョンを指定できる。

OSに複数バージョンのPythonがあれば、仮想環境作成時に使用するバージョンを指定できます。

この問題の解説ページを開く →

289UnixやmacOSにおいて、venvモジュールを使って「venv」という名前のディレクトリに仮想環境を作成する正しいコマンドはどれか。

  1. Apython3 -m venv venv
  2. Bpython3 venv.py venv
  3. Csource venv/bin/activate
  4. Dpip install venv
正解と解説を見る

正解:Apython3 -m venv venv

UnixやmacOSで仮想環境を作成するコマンドは「python3 -m venv ディレクトリ名」です。

この問題の解説ページを開く →

290UnixやmacOSにおいて、作成した仮想環境(ディレクトリ名:venv)を有効化(アクティベート)するための正しいコマンドはどれか。

  1. Asource activate
  2. Bvenv/bin/activate
  3. Csource venv/bin/activate
  4. Dvenv\\Scripts\\activate.bat
正解と解説を見る

正解:Csource venv/bin/activate

UnixやmacOSで仮想環境を有効化するには「source ディレクトリ名/bin/activate」を実行します。

この問題の解説ページを開く →

291Windows環境において、作成した仮想環境(ディレクトリ名:venv)を有効化(アクティベート)するための正しいコマンドはどれか。

  1. Asource venv/bin/activate
  2. Bsource activate
  3. Cvenv\\Scripts\\activate.bat
  4. Dpython -m venv activate
正解と解説を見る

正解:Cvenv\\Scripts\\activate.bat

Windows環境で仮想環境を有効化する書式は「ディレクトリ名\\Scripts\\activate.bat」です。

この問題の解説ページを開く →

292現在、環境にインストールされているサードパーティパッケージの一覧を表示する正しいpipコマンドはどれか。

  1. Apip install --list
  2. Bpip packages
  3. Cpip show
  4. Dpip list
正解と解説を見る

正解:Dpip list

インストール済みのパッケージ一覧を表示するには「pip list」を実行します。

この問題の解説ページを開く →

293pipコマンドおよびそのオプションについて、存在しない、またはエラーになるものはどれか。

  1. Apip install パッケージ名==バージョン
  2. Bpip show パッケージ名
  3. Cpip freeze
  4. Dpip install --list
正解と解説を見る

正解:Dpip install --list

pip install --listというオプションは存在しません。

この問題の解説ページを開く →

294「pip freeze」コマンドの出力結果を「requirements.txt」というファイルに保存する一般的な目的として、正しいものはどれか。

  1. Aファイルを介して環境間でパッケージの種類やバージョンを揃えるため
  2. B仮想環境を新しく作成するため
  3. Cインストールされているパッケージの詳細情報を1つずつ確認するため
  4. Dパッケージをすべてアンインストールするため
正解と解説を見る

正解:Aファイルを介して環境間でパッケージの種類やバージョンを揃えるため

pip freezeの出力をrequirements.txtに保存し、別の環境で入力として使うことで、環境間のパッケージを揃えられます。

この問題の解説ページを開く →

295Python言語の特徴に関する記述として正しいものはどれか。

  1. A文のグルーピング(ブロック)の開始と終了には波括弧「{}」を用いる。
  2. BPythonはコンパイルが不要なインタープリタ言語である。
  3. C変数や引数を使うときは事前にデータ型の宣言が必要である。
  4. D他のプログラミング言語で書かれたプログラムによる機能拡張には対応していない。
正解と解説を見る

正解:BPythonはコンパイルが不要なインタープリタ言語である。

Pythonはコンパイルを必要としないインタープリタ言語であり、型宣言も不要です。

この問題の解説ページを開く →

296対話モードの特徴に関する記述として正しいものはどれか。

  1. A一次プロンプトは「...」で二次プロンプトは「>>>」である。
  2. B複数行の構文を入力して行を継続すると正しいインデントが自動で挿入される。
  3. C一次プロンプトは「>>>」で二次プロンプトは「...」である。
  4. Dプロンプトは対話モードを起動した直後開発者情報のメッセージよりも前に表示される。
正解と解説を見る

正解:C一次プロンプトは「>>>」で二次プロンプトは「...」である。

対話モードの一次プロンプトは「>>>」、複数行にわたる構文の入力時の二次プロンプトは「...」です。インデントは自動挿入されません。

この問題の解説ページを開く →

297対話モードでの入力履歴は、デフォルトで何という名称のファイルに保存されるか。

  1. A.python_history
  2. B.command_history
  3. Cpython_history
  4. Dhistory.txt
正解と解説を見る

正解:A.python_history

対話モードの入力履歴は、デフォルトでホームディレクトリの「.python_history」に保存されます。

この問題の解説ページを開く →

298「x = 'one'」および「y = 'two'」が代入されている状態で、「x, y = y, x」を実行した後に「print(x, y)」を実行した結果はどれか。

  1. Aone two
  2. Btwo one
  3. Cone one
  4. Dtwo two
正解と解説を見る

正解:Btwo one

「x, y = y, x」は多重代入を利用して変数xとyの値を入れ替えるため、結果は「two one」となります。

この問題の解説ページを開く →

299次の算術演算のコード x = 3**2 + 6 // 4 を実行して print(x) とした結果として正しいものはどれか。

  1. A3
  2. B7
  3. C10
  4. D11
正解と解説を見る

正解:C10

最初に3**2(累乗)を計算して9、次に6//4(切り下げ除算)を計算して1となり、合計は10になります。

この問題の解説ページを開く →

300PEP 8で推奨されているコーディングスタイルとして「不適切なもの」はどれか。

  1. Aインデントには空白4つを使う。
  2. Bインデントにタブを使わない。
  3. Cソースコードの幅が100文字を超えないように折り返す。
  4. D可能ならコメントは独立した行に書く。
正解と解説を見る

正解:Cソースコードの幅が100文字を超えないように折り返す。

PEP 8では、ソースコードの幅は79文字を超えないように折り返すことが推奨されています(100文字は不適切)。

この問題の解説ページを開く →

301リストのインデックスに関する記述として正しいものはどれか。

  1. Aインデックスに「-1」を指定すると末尾の要素を指定できる。
  2. B先頭の要素を指定するインデックスは1である。
  3. Cインデックスを指定して要素を参照することはできるが値を更新することはできない。
  4. D要素数が5のリストの末尾のインデックスは常に5である。
正解と解説を見る

正解:Aインデックスに「-1」を指定すると末尾の要素を指定できる。

リストの先頭インデックスは0で、負数のインデックス「-1」を使うと末尾の要素を指定できます。また、リストは更新可能です。

この問題の解説ページを開く →

302リスト「lst = [10, 20, 30, 40]」に対して、「print(lst[3:], lst[:2])」を実行した結果として正しいものはどれか。

  1. A[30, 40] [10, 20]
  2. B[40] [10, 20, 30]
  3. C[30] [10, 20]
  4. D[40] [10, 20]
正解と解説を見る

正解:D[40] [10, 20]

lst[3:]はインデックス3から末尾までで[40]、lst[:2]は先頭からインデックス2の直前までで[10, 20]となります。

この問題の解説ページを開く →
Python3エンジニア認定基礎試験の全分野一覧へ戻る