Python3エンジニア認定データ分析試験 第1章 環境とPythonの基礎 予想問題と解説
Python3エンジニア認定データ分析試験「第1章 環境とPythonの基礎」の予想問題を13問収録しています。各問を解説つきで掲載し、全問は演習画面で解けます。出題は公式シラバスの範囲内です。
この章の要点
数値と演算子、文字列、リスト、リスト内包表記、JupyterLabのノートブック、仮想環境とパッケージ管理などを扱う分野です。全13問(基礎4問・標準8問・応用1問)を収録しています。
- 数値と演算子
- 文字列
- リスト
- リスト内包表記
- JupyterLabのノートブック
- 仮想環境とパッケージ管理
情報源と編集区分
公式範囲を確認し、問題数・難易度・確認点は当サイトが集計・編集。
試験概要(公式)確認しておきたいポイント
当サイトの作問時に観察した、取り違えやすい論点です(公式の統計ではありません)。
- 除算 / と切り捨て除算 // の取り違え。// は整数除算で小数部を破棄し、17 // 3 は 5 になる。/ は常に浮動小数点数を返す。剰余は % で、2 になるのはこちらである。
- 冪乗の ** と ^ の取り違え。2 の 7 乗は 2 ** 7 で 128 になる。^ は排他的論理和(ビットごとの XOR)で、2 ^ 7 は 5 になる。
- 文字列とリストの変更可否の取り違え。公式チュートリアルは、文字列は変更できない(不変)と述べ、word[0] = 'J' のように文字列のインデックスへ代入するとエラーになる。リストは可変なので同じ書き方で代入できる。
- 範囲外インデックスとスライスの扱いの違い。word[42] は IndexError になるが、word[4:42] のようにスライスで範囲外を指定してもエラーにならず、'Python' なら 'on' が取り出される。
- リストの代入とコピーの混同。rgba = rgb は新しいリストを作らず同じリストを参照するだけなので、一方の変更はもう一方から見える。rgba[:] のスライスは浅いコピーを新しく作る。
- 内包表記のタプルの書き方。要素がタプルのときは丸括弧で囲む必要があり、[x, x ** 2 for x in range(6)] は SyntaxError、[(x, x ** 2) for x in range(6)] が正しい書き方になる。
- 仮想環境の有効化と無効化のコマンドの取り違え。Unix や Mac OS では source tutorial-env/bin/activate で有効化し、deactivate で無効化する。python -m venv は有効化ではなく環境を作る命令である。アプリケーションごとに必要なライブラリのバージョンが違うときの解決策が仮想環境である。
よくある質問
Q第1章 環境とPythonの基礎は何問収録されていますか?
現在13問を収録しています。内訳は基礎4問・標準8問・応用1問です。
Q第1章 環境とPythonの基礎の頻出論点は何ですか?
数値と演算子、文字列、リスト、リスト内包表記、JupyterLabのノートブック、仮想環境とパッケージ管理などが出題対象です(当サイト収録問題に基づく編集部集計)。
Q間違えた問題はどう復習すればいいですか?
誤答した選択肢のどこがずれていたかを解説で確認し、関連用語がある場合は用語集で定義に戻ってから再演習することをおすすめします。
Python で 17 // 3 を評価した結果はどれか。
答えと解説を見る
正解は 5 である。公式チュートリアルは、// 演算子は整数除算を行い、整数値を返すと述べており、例として 17 // 3 が 5 になることを示している。小数部は破棄される。5.666666666666667 は除算 / の結果で、/ は常に浮動小数点数を返す。2 は剰余 % の結果である。公式は 5 * 3 + 2 が 17 になることを、切り捨てられた商と除数と剰余の関係として示している。6 は切り上げた値であり、// は小数部を破棄するため該当しない。
https://docs.python.org/ja/3/tutorial/introduction.html (Python公式チュートリアル 数値)
Python で 2 の 7 乗を計算する式として正しいものはどれか。
答えと解説を見る
正解は 2 ** 7 である。公式チュートリアルは、Python では冪乗を計算するのに ** 演算子が使えると述べ、2 ** 7 が 128 になる例を示している。2 * 7 は積で 14 になる。2 // 7 は整数除算で、小数部を破棄するため 0 になる。2 ^ 7 は冪乗を表す演算子ではないため、公式の冪乗の説明に当たらない。^ は排他的論理和(ビットごとの XOR)で、2 ^ 7 は 5 になる。演算子の記号は、和 +、差 -、積 *、除算 /、整数除算 //、剰余 %、冪乗 ** と整理して覚えると取り違えを防げる。
https://docs.python.org/ja/3/tutorial/introduction.html (Python公式チュートリアル 数値)
word = 'Python' と代入した後に word[0] = 'J' を実行したときの結果として正しいものはどれか。
答えと解説を見る
TypeError が発生する正解正解は TypeError が発生する、である。公式チュートリアルは、Python の文字列は変更できない、つまり不変であり、文字列のインデックスで指定した場所に代入を行うとエラーが発生すると述べ、word[0] = 'J' が TypeError になる例を示している。'Jython' への変更は不変のため起こらない。IndexError は範囲外のインデックスを読もうとしたときのエラーで、word[0] は範囲内なので該当しない。一部を変えた文字列がほしいときは、新しい文字列を作り直す。
https://docs.python.org/ja/3/tutorial/introduction.html (Python公式チュートリアル 文字列)
word が 6 文字の文字列のとき、word[42] と word[4:42] の挙動の組み合わせとして正しいものはどれか。
答えと解説を見る
IndexError になり、word[4:42] は 4 文字目以降が取り出される正解正解は「word[42] は IndexError になり、word[4:42] は 4 文字目以降が取り出される」である。公式チュートリアルは、大き過ぎるインデックスを使うとエラーが発生するが、スライスで範囲外のインデックスを使ったときは上手く対応して扱われると述べている。例として、'Python' に対する word[42] は IndexError、word[4:42] は 'on'、word[42:] は空文字列になる。TypeError は不変な文字列への代入で出るエラーであり、読み出しには関係しない。
https://docs.python.org/ja/3/tutorial/introduction.html (Python公式チュートリアル 文字列)
文字列リテラルの引用符の前に r を付けた raw 文字列の説明として正しいものはどれか。
答えと解説を見る
正解は「バックスラッシュに続く文字を特殊文字として解釈せず、そのまま扱う」である。公式チュートリアルは、\ に続く文字を特殊文字として解釈されたくない場合は、最初の引用符の前に r を付けた raw 文字列が使えると述べ、print(r'C:\this\name') が C:\this\name と表示される例を示している。複数行にまたがる文字列は三連引用符で書く方法であり、r の役割ではない。文字列はもともと不変であり、r を付けても読み取り専用になるわけではない。
https://docs.python.org/ja/3/tutorial/introduction.html (Python公式チュートリアル 文字列)
rgb = ["Red", "Green", "Blue"] のあと rgba = rgb と代入し、rgba.append("Alph") を実行した。このとき rgb の内容はどうなるか。
答えと解説を見る
正解は ["Red", "Green", "Blue", "Alph"] になる、である。公式チュートリアルは、単純な代入では Python はデータをコピーせず、リストを変数に代入するとその変数は既存のリストを参照すると述べている。そのため、ある変数を通してリストに行った変更は、そのリストを参照するすべての変数から確認できる。rgb と rgba は同じオブジェクトを参照しており(id(rgb) == id(rgba) は True)、rgba への append は rgb にも反映される。リストは可変なので append でエラーにもならない。
https://docs.python.org/ja/3/tutorial/introduction.html (Python公式チュートリアル リスト型)
リスト rgba に対して correct_rgba = rgba[:] と書いた場合の説明として正しいものはどれか。
答えと解説を見る
正解は「rgba の浅いコピーが新しいリストとして作られる」である。公式チュートリアルは、すべてのスライス操作は指定された要素を含む新しいリストを返すと述べ、rgba[:] はリストの浅いコピーを返すと示している。例では correct_rgba[-1] = "Alpha" と書き換えても rgba 側は変わらない。同じリストへの参照が作られるのは rgba2 = rgba のような単純な代入の場合である。代入は参照の共有、スライスは新しいリストの作成と区別しておくと、リストの変更が他の変数に及ぶかどうかを判断できる。
https://docs.python.org/ja/3/tutorial/introduction.html (Python公式チュートリアル リスト型)
[x ** 2 for x in range(10)] と同じ結果になるものはどれか。
答えと解説を見る
正解は「空のリスト squares を用意し、for x in range(10) の中で squares.append(x ** 2) を繰り返す」である。公式チュートリアルは、for ループと append で平方のリスト [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] を作る例を示したうえで、squares = [x ** 2 for x in range(10)] でも同じ結果になり、こちらのほうが簡潔で読みやすいと述べている。リスト内包表記は各要素に操作を行った結果を要素にしたリストを作る手段であり、元の要素をそのまま並べるものでも、数値1つを返すものでもない。
https://docs.python.org/ja/3/tutorial/datastructures.html (Python公式チュートリアル リストの内包表記)
各 x について x と x ** 2 の組をリストにしたい。x が range(6) の値のとき、正しい書き方はどれか。
答えと解説を見る
正解は [(x, x ** 2) for x in range(6)] である。公式チュートリアルは、式がタプルの場合は丸括弧で囲まないとエラーが発生すると述べ、[x, x ** 2 for x in range(6)] は SyntaxError になり、[(x, x ** 2) for x in range(6)] は [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)] になる例を示している。リスト内包表記は括弧の中に式、for 句、0個以上の for 句か if 句を置く構成であり、for 句をコロン付きで先頭に書く形は内包表記の構成に当たらない。
https://docs.python.org/ja/3/tutorial/datastructures.html (Python公式チュートリアル リストの内包表記)
JupyterLab のノートブックについて、公式ドキュメントの記載と合っているものはどれか。
答えと解説を見る
正解は「ノートブックは、実行可能なコードと Markdown の説明文などを組み合わせた文書で、拡張子は .ipynb である」である。JupyterLab の公式ドキュメントは、Jupyter ノートブックを、実行可能なコードと、Markdown の説明文、LaTeX の数式、画像、インタラクティブな可視化などのリッチな出力を組み合わせた文書と説明し、ファイルは .ipynb であるとしている。信頼できる対象になるのはコードセルだけで、Markdown セルは常にサニタイズされる。拡張子 .py や、閲覧専用という記載はない。
JupyterLab公式ドキュメント User Guide「Notebooks」
アプリケーションAはあるライブラリのバージョン 1.0、アプリケーションBは同じライブラリのバージョン 2.0 を必要とする。Python 公式チュートリアルが示す、この衝突の解決策はどれか。
答えと解説を見る
正解は「アプリケーションごとに別の仮想環境を作り、それぞれに必要なバージョンをインストールする」である。公式チュートリアルは、1つのインストールされた Python が全てのアプリケーションの要求に対応することは不可能であり、解決策は仮想環境を作ることだと述べている。仮想環境は、特定のバージョンの Python と幾つかの追加パッケージを含んだ Python インストールを構成するディレクトリで、アプリケーションAとBが別々の仮想環境を持てば、互いに影響しない。片方だけをインストールすると、もう一方のアプリケーションが動かなくなる。
Python 公式チュートリアル日本語版「仮想環境とパッケージ」
Unix や Mac OS で、venv で作った仮想環境 tutorial-env を有効化し、作業後に無効化する手順として、Python 公式チュートリアルの記載に合っているものはどれか。
答えと解説を見る
正解は「source tutorial-env/bin/activate で有効化し、deactivate で無効化する」である。公式チュートリアルは、Unix や Mac OS では source tutorial-env/bin/activate を実行して有効化し、無効化はターミナルに deactivate と入力すると述べている。python -m venv tutorial-env は仮想環境を作成するコマンドで、有効化ではない。tutorial-env\Scripts\activate は Windows の場合の有効化コマンドである。
Python 公式チュートリアル日本語版「仮想環境とパッケージ」
conda の公式ドキュメントに合っている記述はどれか。
答えと解説を見る
正解は「conda create --name myenvironment python numpy pandas で、python・numpy・pandas を含む環境 myenvironment を作成できる」である。conda の公式ドキュメントは、環境名のあとにパッケージを指定すると、環境の作成時にパッケージを追加できると述べ、この例を示している。conda は Windows、macOS、Linux で動くパッケージ・環境管理のコマンドラインツールである。conda info --envs は環境の一覧を表示するコマンドで、パッケージの一覧ではない。
conda 公式ドキュメント「Getting started with conda」