Python3エンジニア認定基礎試験 対策(其の3)

スポンサーリンク
python-code python
この記事は約16分で読めます。

Python3エンジニア認定基礎試験を受けるべく勉強をしていますが、実際に模試が無料でありましたので復習しながらまとめていきますの第3回めです。

1回め、2回めはこちらです!

  1. 問題ベースの復習
    1. Pythonインタープリタの出力結果は?
      1. 答え
    2. 正規表現ツールを提供するモジュールは?
      1. 答え
      2. オブジェクト
    3. パッケージの説明として正しいものは?
      1. 答え
    4. 以下のプログラムを実行した際の出力結果は?
      1. 答え
    5. 以下のプログラムを実行した際の出力結果は?
      1. 答え
    6. Pythonにおけるタブ補完
      1. 答え
    7. 以下のプログラムを実行した際の出力結果は?
      1. 答え
    8. 以下のプログラムを実行した際の出力結果は?
      1. 答え
    9. 以下のプログラムを実行した際の出力結果は?
      1. 答え
    10. プログラムを実行し、以下の実行結果を得たい場合の(A)に記述するコードは?
      1. 答え
      2. クラス
    11. 以下のプログラムを実行した際の出力結果は?
      1. 答え
    12. 以下のプログラムを実行した際の出力結果は?
      1. 答え
    13. リストから、引数の値(x)の最初のアイテムを削除するメソッドは?
      1. 答え
    14. 以下のプログラムを実行した際の出力結果は?
      1. 答え
    15. 対話モード時に最後に表示した式を格納している変数は?
      1. 答え
    16. コンパイル済みPythonファイルの拡張子は?
      1. 答え
    17. sys.pathの初期化で参照しないものは?
      1. 答え
    18. 仮想環境を生成、管理するのに使われているスクリプトは?
      1. 答え
    19. 以下のプログラムを実行した際の出力結果は?
      1. 答え
    20. 以下のプログラムを実行した際の出力結果は?
      1. 答え
    21. クリーンアップ動作を定義しているオブジェクトに対して、クリーンアップ動作を保証した形で利用するための構文は?
      1. 答え
  2. 参考資料
  3. おすすめツール
スポンサーリンク

問題ベースの復習

Pythonインタープリタの出力結果は?

>>> import math
>>> math.sqrt(2)

答え

1.414213562

math.sqrt()・・・()で指定した数値の平方根(√)を返す。

正規表現ツールを提供するモジュールは?

答え

re

re モジュールは正規表現パターンを使用した検索、置換、連結、分割などの便利なメソッドが備えられている。

re --- 正規表現操作 — Python 3.9.0 ドキュメント
例
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
  • re.search()・・・string を走査し、正規表現 pattern がマッチを生じさせる最初の場所を探して、対応するマッチオブジェクトを返す。
  • Match.group([group1, …])・・・このマッチの 1 つ以上のサブグループを返す。引数が1つなら結果は1つの文字列。

オブジェクト

状態(属性または値)と、定義された振る舞い(メソッド)を持っているすべてのデータ。

パッケージの説明として正しいものは?

答え

ドット区切りモジュール名を使って、Pythonのモジュールを構築する方法。

パッケージ (package) は、Python のモジュール名前空間を “ドット付きモジュール名” を使って構造化する手段です。例えば、モジュール名 A.B は、 A というパッケージのサブモジュール B を表します。ちょうど、モジュールを利用すると、別々のモジュールの著者が互いのグローバル変数名について心配しなくても済むようになるのと同じように、ドット付きモジュール名を利用すると、 NumPy や Pillow のように複数モジュールからなるパッケージの著者が、互いのモジュール名について心配しなくても済むようになります。

https://docs.python.org/ja/3/tutorial/modules.html#packages
6. モジュール — Python 3.9.0 ドキュメント

モジュールとは、Pythonのファイル(.py)の事

モジュールをいくつか集めてまとめたものがパッケージ

ライブラリは、いくつかのパッケージをまとめて一つのライブラリとしてインストールできるようにしたもの(内部と外部がある)

ライブラリ > パッケージ > モジュール(.py) > クラス、関数

https://ai-inter1.com/python-module_package_library/

function annotation・・・(関数アノテーション) 関数の引数や返り値に関連付けられる任意のメタデータです。シンタックスは 関数定義 で述べられています。アノテーションは関数オブジェクトの annotations 属性からアクセスすることが出来ます。

以下のプログラムを実行した際の出力結果は?

for i in range(20):
    if i%3 == 0:
        print("{}は3で割り切れます".format(i), end=' ')
    elif i>8 and i%2 == 0:
        break
    else:
        continue

答え

0は3で割り切れます 3は3で割り切れます 6は3で割り切れます 9は3で割り切れます

  1. for文の繰り返し
    1. for文と組み合わせることが多いrangeは今回(20)なので、20回繰り返し -> 0~19
  2. for文の中のif文 iを3で割った余りが0の場合には、{}は3で割り切れます が出力(出力の最後は、半角スペース区切り)
    1. iを3で割った余りが0の場合 -> 0, 3, 6, 9, 12, 15, 18
  3. iを3で割った余りが0 ではない場合は次のelifに移る。
    1. iが8より大きいかつiを2で割った余りが0の場合にはループを抜ける -> 10, 12, 14, 16, 18
  4. iが8より大きいかつiを2で割った余りが0 でもなければ、 elseの中へ。
    1. continueはそれ以降の処理が実行されずに次のループに進む。

ifが該当する 0, 3, 6, 9, 12, 15, 18 でなければ、continueでループが続く。

その中で、i = 10 のときに、ifの真偽が偽になるため、elifに進む。10 > 8 かつ、10%2 == 0のため、breakでループを抜ける。

if文を使った条件分岐
Python で条件分岐を行うには if 文を使います。ここでは if 文を使った条件分岐の方法について解説します。

以下のプログラムを実行した際の出力結果は?

print(range(5))

答え

range(0, 5)

range(start, stop[, step])

組み込み型 — Python 3.9.0 ドキュメント

Pythonにおけるタブ補完

答え

変数とモジュール名の補完はインタープリタの起動時に自動で有効になっており、[Tab]キーで補完機能が呼び出される。

【Python学習】タブ補完に関してまとめてみる | SECAT
今回はPythonチュートリアル第14章から「タブ補完」の内容をまとめてみる。上手く利用して入力ミスを減らすぞ。

以下のプログラムを実行した際の出力結果は?

dic = {'Noro': 1, 'Nakao': 2, 'Miyaoka': 3}
dic['Miyaoka'] += 1
print(dic)

答え

{‘Noro’: 1, ‘Nakao’: 2, ‘Miyaoka’: 4}

  1. {} は辞書型オブジェクト。要素が3つはいっている。
  2. そこに、新しくキーとバリューを追加している。
    1. 変数名[‘キー名’] = バリュー名 で、追加できる。
    2. 今回は、キーが既存のものなので上書かれる。
例
dictio = {"dog":1, "cat":2, "bear":3}
dictio["raba"] = 4
print(dictio)

出力
{"dog":1, "cat":2, "bear":3, "raba":4}
【Python入門】dictionary(辞書)の使い方。基本と応用 | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト
Pythonでは「キーと値を組み合わせたdictionary(辞書)」というものがあります。 辞書を使用することで、特定の要素を検索したり、追加や削除も簡単にできます。 そもそもdictionaryって何? dictionaryの基本的な使い方が知りたい 辞書型はリスト型に比べるとやや複雑ではありますが、覚えることで目...

以下のプログラムを実行した際の出力結果は?

dic = [
    ['Noro', 'Nakao', 'Miyaoka'],
    ['Kimura', 'Miyashita', 'Shibata'],
    ['Matsumoto', 'Tanaka', 'Ivan'],
]

print(list(zip(*dic)))

答え

[(‘Noro’, ‘Kimura’, ‘Matsumoto’), (‘Nakao’, ‘Miyashita’, ‘Tanaka’), (‘Miyaoka’, ‘Shibata’, ‘Ivan’)]

  1. []で囲まれているのでリスト型で多重になっている。
  2. listで出力で、zip()関数にイテラブルが *dic のため同じインデックスがリスト型で出力される。

zip()・・・複数のイテラブルオブジェクト(リストやタプル)の要素をまとめて新しいイテラブルオブジェクトを作る関数。forで複数のリストの要素を取得するときなどに使う組み込み関数。

戻り値はzipオブジェクトで、それぞれのiterableの同じインデックスの要素が組み合わされ、タプルのイテレータとして返る。

組み込み関数 — Python 3.9.0 ドキュメント

以下のプログラムを実行した際の出力結果は?

member = {1: 'Noro', 2: 'Nakao', 3: 'Miyaoka'}
member[4] = 'Kimura'
del member[3]
print(list(member.keys()))

答え

[1, 2, 4]
  1. {}は辞書型オブジェクト。3つの要素が入っている。
  2. キーが4, バリューがKimuraで要素を追加
  3. 辞書型オブジェクトの中から、キーが3番目のもの(3: ‘Miyaoka’)を削除
  4. 辞書memberのキーをlist型で取得し出力

辞書.keys()・・・辞書の中のすべてのキーの一覧を取得するには keys メソッドを使用。

辞書に含まれるすべてのキーと値を取得する
辞書に含まれるすべてのキー、すべての値、すべてのキーと値の組み合わせをそれぞれ取得する方法について解説します。キーの取得には keys メソッド、値の取得には values メソッド、キーと値の組み合わせの取得には items メソッドを使用します。

プログラムを実行し、以下の実行結果を得たい場合の(A)に記述するコードは?

Noro
Miyaoka
class DiveIntoCode:
    def __init__(self, teacher, mentor):
        self.teacher = teacher
        self.mentor = mentor
(A)
print(dic.teacher)
print(dic.mentor)

答え

dic = DiveIntoCode(‘Noro’, ‘Miyaoka’)

  1. DiveIntoCodeクラスを作成。
    1. オブジェクト = クラス名() をインスタンス化という。
    2. 内部では、コンストラクタを作成。
  2. 引数に設定した値をself.でアクセス
  3. dic = DiveIntoCode(‘Noro’, ‘Miyaoka’)でインスタンス化。

コンストラクタ・・・オブジェクトが生成されるときに実行されるメソッド(関数)のこと。オブジェクトが扱う変数などの初期化を行う。(オブジェクトはクラスを元に生成される。)

コンストラクタの書き方
def __init__( self, 引数2, 引数3, ... ) :

コンストラクタの名前は、__init__に決まっている。

第1引数のselfは、オブジェクト自信を指す。
「self.**」とするとクラス自身が保持するプロパティにアクセスできる
さらに、省略できない

Pythonのクラスでコンストラクタを使う方法【初心者向け】
初心者向けにPythonでコンストラクタを使う方法について解説しています。これはオブジェクト指向の言語においてインスタンスが生成されるときに実行されるものです。クラス・オブジェクトとあわせて概念と書き方を覚えておきましょう。
Python のクラスと self と __init__ | 民主主義に乾杯
__init__ が難しいです。

クラス

ユーザー定義オブジェクトを生成するための雛形。クラス定義には通常、そのクラスのインスタンスで実行されるメソッドの定義が書かれている。

以下のプログラムを実行した際の出力結果は?

import json
x = {'name': 'yamada', 'data': [2, 3, 4]}
print(json.dumps(x))

答え

{“name” : “yamada”, “data” : [2, 3, 4]}

  1. jsonライブラリを読み込み
  2. x には辞書型オブジェクトが入っている。
  3. dumps()関数を使って、データをjson形式にエンコード

json.dumps(x)・・・xをjson形式にエンコード

Pythonのデータ階層構造をとって文字列表現にコンバートすることを、シリアライズという。

文字列表現からデータを再構築することは、デシリアライズという。

json --- JSON エンコーダおよびデコーダ — Python 3.9.0 ドキュメント

以下のプログラムを実行した際の出力結果は?

diver = [d * 2 for d in 'diver']

print(diver)

答え

[‘dd’, ‘ii’, ‘vv’, ‘ee’, ‘rr’]

  1. リスト型で、文字列(str) diver の各要素の中身をリスト化し、2倍する

リスト [] のfor文で *2 になっているので、各要素をそれぞれ *2 する

リストから、引数の値(x)の最初のアイテムを削除するメソッドは?

答え

list.remove(x)

  • clear()・・・すべての要素を削除
  • pop()・・・指定した位置の要素を削除し、値を取得
  • remove()・・・指定した値を同じ要素を検索し、最初の要素を削除
  • del・・・インデックス、スライスで位置や範囲を指定して削除

以下のプログラムを実行した際の出力結果は?

def dive_into_code(teacher, *mentor):
    print(teacher)

dive_into_code('Noro', 'Nakao', 'Miyaoka')

答え

Noro

  1. 関数 dive_into_code を作成
    1. 引数が、teacherとmentorをタプルで
    2. teacherの方を出力
  2. 関数を使用する際に引数を3つとった。(‘Noro’, ‘Nakao’, ‘Miyaoka’)
    1. Noroだけがteacherで、Nakao, Miyaokaは*mentorに入っている

関数定義のときに引数に * や ** をつけると、任意の数の引数(可変長引数)を指定できる。

  • *args・・・複数の引数をタプルとして受け取る
  • **kwargs・・・複数のキーワード引数を辞書として受け取る
Pythonの可変長引数(*args, **kwargs)の使い方 | note.nkmk.me
Pythonのコードを見て「何だこれ」とつまずきやすいのが、関数の引数の*argsと**kwargs。関数定義で引数に*と**(1個または2個のアスタリスク)をつけると、任意の数の引数(可変長引数)を指定することができる。慣例として*args, **kwargsという名前が使われることが多いが、*と**が頭についていれ...

対話モード時に最後に表示した式を格納している変数は?

答え

変数: _(アンダーバー)

  • 対話モードは、コマンドプロンプトにpython3と入力するとなれる。
  • 環境変数PYTHONSTARTUPに特定のPythonスクリプトのパスを設定することで、対話モードが起動する時にそのスクリプトを最初に実行してくれる。
  • 対話モードでは、最後に表示した値を変数「_」(アンダースコア)に代入
対話モードにて

>>> tax = 10000 / 100
>>> price = 2000
>>> price * tax
200000.0
>>> price + _
202000.0

コンパイル済みPythonファイルの拡張子は?

答え

pyc

pycファイル・・・Pythonでモジュールをインポートすると、拡張子pycのファイルができる。pyファイルをコンパイルした結果のバイトコードを含むファイル。
※Python はそーっっをバイトコードにコンパイルしてから実行する。

Pythonのpycファイルを作成する方法【初心者向け】
初心者向けにPythonのpycファイルについて解説しています。これはPythonでモジュールをインポートした際に自動で作成されるファイルです。pycファイルの扱い方の基本を覚えておきましょう。ソースコードを書きながら説明しています。

sys.pathの初期化で参照しないものは?

答え

スクリプトが存在するフォルダのシンボリックリンク先

モジュールを検索するパスを示す文字列のリスト。 PYTHONPATH 環境変数と、インストール時に指定したデフォルトパスで初期化されます。

起動時に初期化された後、リストの先頭 (path[0]) には Python インタプリタを起動したスクリプトのあるディレクトリが挿入されます。

スクリプトのディレクトリがない (インタプリタが対話セッションで起動された時や、スクリプトを標準入力から読み込んだ場合など) 場合、 path[0] は空文字列となり、Python はカレントディレクトリからモジュールの検索を開始します。スクリプトディレクトリは、 PYTHONPATH で指定したディレクトリの  に挿入されますので注意が必要です。

https://docs.python.org/ja/3/library/sys.html?highlight=sys%20path

仮想環境を生成、管理するのに使われているスクリプトは?

答え

pyvenv

venvモジュールは、軽量な仮想環境の構築をすることができる。

venv --- 仮想環境の作成 — Python 3.9.0 ドキュメント

以下のプログラムを実行した際の出力結果は?

name1, name2, name3, name4 = '', 'suzuki', 'tanaka', 'sato'
selected_name = name1 or name2 or name3 or name4
print(selected_name)

答え

suzuki

  1. name1には”が、name2には’suzuki’が、name3には’tanaka’が、name4には’sato’が入っている。
  2. 変数selected_nameに、name1 or name2 or name3 or name4 が代入されている。
    1. 論理演算子 or は、a or bの場合、どちらかがtrueならばtrueを返し、どちらともfalseならfalseを返す。 -> 左から右へ順番に比較されていく。結果が出た時点で終了。
    2. name1 or name2 の比較。 -> ”と’suzuki’の比較となり。”はfalseだが、’suzuki’はtrueなので、trueの判定となり、論理演算終了。そのため、trueになっていた’suzuki’が出力される。
5. データ構造 — Python 3.9.0 ドキュメント

以下のプログラムを実行した際の出力結果は?

dive_into_code = [(1, 'Noro'), (2, 'Nakao'), (3, 'Miyaoka'), (4, 'Kimura')]
dic = dive_into_code
dic.sort(key=lambda dic: dic[1])

print(dic)

答え

[(4, ‘Kimura’), (3, ‘Miyaoka’), (2, ‘Nakao’), (1, ‘Noro’)]

  1. 変数dive_into_codeに、リスト型で要素が入っている。
  2. 変数dive_into_codeの中身を、変数dicに代入
  3. dicをsort関数で並び替え
    1. sort(【リスト型/辞書型】, key=lambda x: 【keyにしたい要素】)
    2. dic[1]のように[1]をとると、バリューでの並び替えとなる。([0]をとると、キーでの並び替えとなる。)昇順。
    3. lambdaは無名関数

lambda・・・無名のインライン関数で、単一の式により構成され、コール時に評価される。ラムダ関数を生成する構文は、 lambda [引数]: 式

組み込み関数 sorted のほうが情報があった。

組み込み関数 — Python 3.9.0 ドキュメント

クリーンアップ動作を定義しているオブジェクトに対して、クリーンアップ動作を保証した形で利用するための構文は?

答え

with

オブジェクトの利用後にインスタンスを破棄したい場合など、with文を使うことでその破棄が保証される。

例
for line in open("file.txt"):
    print(line,  end="")

# これだと、ファイルが開きっぱなしになるので良くない。


with open("file.txt") as f:
    for line in f:
        print(line,  end="")

# こうしてあげることで、ファイルfは必ずクローズされる用になる。(行の処理中に問題が起きても。)
ゼロから始めるPython(7) - Qiita
ゼロから始めるPythonの7回目になります。 チュートリアル見たらまだ半分行ってなかった・・・がんばります。 6回目はこちら おさらい 前回はモジュールとパッケージ、そして__init__.pyの役割などを説明しました。 読ま...

with 文はファイルのようなオブジェクトが常に、即座に正しくクリーンアップされることを保証します。

https://docs.python.org/ja/3/tutorial/errors.html#predefined-clean-up-actions

参考資料

おすすめツール

ブラウザ上でpython3のコードを実行して試せる!

ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO
paiza.IOはオンラインですぐにプログラミングが始められる、オンライン実行環境です。Java,Ruby,Python,PHP,Perlなど主要24言語に対応。プログラミング学習にも。
タイトルとURLをコピーしました