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 --- 正規表現操作
ソースコード: Lib/re/ このモジュールは Perl に見られる正規表現マッチング操作と同様のものを提供します。 パターンおよび検索される文字列には、Unicode 文字列 ( str) や 8 ビット文字列 ( bytes) を使います。ただし、Unicode 文字列と 8 ビット文字列の混在はできません。つま...
例
>>> 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 インタプリタを終了させ、再び起動すると、これまでに行ってきた定義 (関数や変数) は失われています。ですから、より長いプログラムを書きたいなら、テキストエディタを使ってインタプリタへの入力を用意しておき、手作業の代わりにファイルを入力に使って動作させるとよいでしょう。この作業を スクリプト (script...

モジュールとは、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におけるタブ補完

答え

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

https://www.secat-blog.net/wordpress/learn-python-tab_completion-python_tutorial_ver3_chapter14/

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

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(辞書)の使い方。基本と応用 | 侍エンジニアブログ
この記事では「 【Python入門】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 インタプリタには数多くの関数と型が組み込まれており、いつでも利用できます。それらをここにアルファベット順に挙げます。,,,, 組み込み関数,,, A, abs(), aiter(), all(), anext(), any(), ascii(),, B, bin(), bool(), breakpoint...

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

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のクラスでコンストラクタを使う方法【初心者向け】 | TechAcademyマガジン
初心者向けに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 エンコーダおよびデコーダ
ソースコード: Lib/json/__init__.py JSON (JavaScript Object Notation) は、 RFC 7159( RFC 4627 を obsolete) と ECMA-404 によって定義された軽量のデータ交換用のフォーマットです。 JavaScript のオブジェクトリテラル記...

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

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個のアスタリスク)をつけると、呼び出し時に任意の数の引数(可変長引数 ...

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

答え

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

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

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

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

答え

pyc

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

Pythonのpycファイルを作成する方法【初心者向け】 | TechAcademyマガジン
初心者向けに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 --- 仮想環境の作成
ソースコード: Lib/venv/ venv モジュールは、軽量な仮想環境の作成を行います。それぞれの仮想環境は、 site ディレクトリに独立した Python パッケージの集合を持っています。仮想環境は、ベース Python とも呼ばれる、すでにインストールされている Python の上に作成され、明示的にインスト...

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

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. データ構造
この章では、すでに学んだことについてより詳しく説明するとともに、いくつか新しいことを追加します。 リスト型についてもう少し: リストデータ型には、他にもいくつかメソッドがあります。リストオブジェクトのすべてのメソッドを以下に示します: 以下にリストのメソッドをほぼ全て使った例を示します: insert, remove,...

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

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 インタプリタには数多くの関数と型が組み込まれており、いつでも利用できます。それらをここにアルファベット順に挙げます。,,,, 組み込み関数,,, A, abs(), aiter(), all(), anext(), any(), ascii(),, B, bin(), bool(), breakpoint...

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

答え

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をコピーしました