Python3エンジニア認定基礎試験を受けるべく勉強をしていますが、実際に模試が無料でありましたので復習しながらまとめていきます。
- Python3エンジニア認定基礎試験
- 問題ベースの復習
- ビルドイン関数 dir()とは
- for文を実行した際の出力結果は?
- コマンドライン引数を取得するためのモジュールは?
- プログラムの出力結果は?
- プログラムを実行し、次の結果を得たい。(A)には何が入るか?
- 以下のプログラムの出力結果は?
- open関数のモードは?
- プログラムを実行し以下の実行結果を得たい。(A)に入るコードは?
- 以下のプログラムと同じ出力結果を得たい場合の(A)に入るコードは?
- リストから、引数の値(x)の最初のアイテムを削除するメソッド
- Pythonインタープリタにて以下のように入力した出力結果は?
- Pythonインタープリタにて以下のように入力した出力結果は?
- mutableなものをまとめたものは?
- プログラムを実行した場合の出力結果は?
- 参考資料
Python3エンジニア認定基礎試験
公式サイトにはこのようにありました。
試験センター:全国のオデッセイコミュニケーションズCBTテストセンター
申込URL:http://cbt.odyssey-com.co.jp/pythonic-exam.html
受験料金:1万円(税別) 学割5千円(税別)
概要:文法基礎を問う試験
問題数:40問(すべて選択問題)
試験時間:60分
合格ライン:正答率70%
出題範囲:主教材であるオライリー・ジャパン「Pythonチュートリアル 第3版」の掲載内容を出題範囲として、以下の比率で出題いたします。また、一般的な知識からも出題されます。
70%以上で合格。合計40問ということは、28問以上の○が必要ということになります。
基礎をしっかり抑えていることと、教材がオライリーの「Pythonチュートリアル 第3版」なのでオライリーレベルの理解が必要ということになります。
Python3エンジニア認定基礎模擬試験
模擬試験は、プログラミングスクールの Dive into Code のサイトにあります。こちらは無料です。
この模擬試験を受けてみて、まだまだ難しいと思ってしまいました。
まだまだ基礎ができていないということで試験勉強っぽくなってしまいますが、模擬試験の問題ベースで復習していこうと思います。
問題はジャンルがおそらくランダムで出題されているので出たものから復習していきます。
問題ベースの復習
ビルドイン関数 dir()とは
dir()関数は、モジュールが定義している名前を確認することができる。
引数に指定したオブジェクトの属性やメソッドなどの名前のリストを返してくれる。
ちなみにビルドイン関数とは、組み込み関数のこと。
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'math']
for文を実行した際の出力結果は?
print("出力結果: ")
for num in range(10):
print(num)
pythonの組み込み関数 range()は、連続した数字のオブジェクトを作るための関数です。
for文と組み合わせることで、range(10)で10回繰り返しということになります。
答え
出力結果: 0123456789
コマンドライン引数を取得するためのモジュールは?
答え
sys
sys以外のモジュール
- re・・・郵便番号、メルアドなどの特定の文字列を正規表現で指定して解析
- os・・・ファイルとフォルダの作成、削除などのOSで提供する機能が使用できる
- zipfile・・・Zip圧縮されたファイルの読み書き
- csv・・・CSVファイルの読み書き
- pdb・・・デバッグをする際のべのり機能を提供
- logging・・・ログを捨つ力するための各種機能を提供
プログラムの出力結果は?
print(3 * 'Dive' + 'into' + 'Code')
答え
DiveDiveDiveintoCode
掛け算割り算が優先されるので、まずは最初の ‘Dive’が3回呼ばれ、その後にほかの文字列が連結される。
プログラムを実行し、次の結果を得たい。(A)には何が入るか?
Miyashita
dive_into_code = ['Noro', 'Nakao', 'Miyaoka', 'Miyashita', 'Shibata', 'Kimura']
(A)
print(ex_mentor)
答え
ex_mentor = dive_into_code.pop(3)
listから、3番めの ‘Miyashita’を削除して、その値を取得しex_mentorに代入。
list型のリスト要素の削除はいくつかのパターンがある。
- clear()・・・すべての要素を削除
- pop()・・・指定した位置の要素を削除し、値を取得
- remove()・・・指定した値を同じ要素を検索し、最初の要素を削除
- del・・・インデックス、スライスで位置や範囲を指定して削除
以下のプログラムの出力結果は?
num = [[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10]]
col = [row[2] for row in num]
print(col)
答え
[3, 8]
変数numには、listが多重で代入されている。(いわゆる多次元配列)
変数colには、for文でnumの要素をrowにコピーして、そのrowの2番目を出力。
open関数のモードは?
r- というのはない
- r・・・読み込み用にファイルを開く
- w・・・書き込み用にファイルを開く ファイルがある場合は全部上書き
- a・・・書き込み用にファイルを開く ファイルがある場合は末尾に追記できる
- x・・・書き込み用にファイルを開く ファイルがある場合はエラーになる(FileExistsError)
- t・・・テキストモード
- +・・・更新用としてファイルを開く 読み書き両方
プログラムを実行し以下の実行結果を得たい。(A)に入るコードは?
['Noro']
['Noro', 'Nakao']
['Noro', 'Nakao', 'Miyashita']
def dive_into_code(teacher, L=[]):
(A)
return L
print(dive_into_code('Noro'))
print(dive_into_code('Nakao'))
print(dive_into_code('Miyashita'))
答え
L.append(teacher)
listが3つある。
関数 dive_into_codeの引数に teacherと L=[]をとる。
返り値は、L
printで要素を1つずつ追加していくと望む結果が出せるので、appendを使う。
Pythonでは、listに要素を追加したり別のリストを統合したりするにはいくつかの方法がある。
- append()・・・末尾に要素を追加
- extend(), + 演算子・・・末尾に別のリストやタプルを結合(連結)
- insert()・・・指定位置に要素を追加(挿入)
- スライス・・・指定位置に別のリストやタプルを追加(挿入)
以下のプログラムと同じ出力結果を得たい場合の(A)に入るコードは?
dive_into_code = ['Noro', 'Nakao', 'Miyaoka', 'Miyashita', 'Shibata', 'Kimura']
dive_into_code.clear()
print(dive_into_code)
dive_into_code = ['Noro', 'Nakao', 'Miyaoka', 'Miyashita', 'Shibata', 'Kimura']
(A)
print(dive_into_code)
答え
del dive_into_code[:]
- listを変数dive_into_codeに代入
- 変数dive_into_codeにlistの要素を削除するclear() -> listの中身全削除
- 変数dive_into_codeをprint
-> 出力は []
delで全削除することが可能。
del 変数名[:] とすると全範囲指定になる。(スライス)
スライス
シーケンス(リスト[]、文字列、タプル()、バイト列)のいち部分を切り取ってコピーを返す仕組み。
スライスは、始点と終点のインデックスをコロンで囲むとその間を指定できる。
例:全削除
l = list(range(10))
del l[:]
print(l)
#出力 []
例:スライスで選択範囲の削除
l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del l[2:5]
print(l)
# [0, 1, 5, 6, 7, 8, 9]
l = list(range(10))
del l[:3]
print(l)
# 始点の省略。3要素目から
# [3, 4, 5, 6, 7, 8, 9]
l = list(range(10))
del l[4:]
print(l)
# 終点の省略。4要素目まで。
# [0, 1, 2, 3]
l = list(range(10))
del l[-3:]
print(l)
# 終点の省略。後ろから3要素目(7)までを省略。
# ※マイナスの場合は、末尾の要素が -1 となる。
# [0, 1, 2, 3, 4, 5, 6]
参考:Pythonでリスト(配列)の要素を削除するclear, pop, remove, del
リストから、引数の値(x)の最初のアイテムを削除するメソッド
答え
list.remove(x)
remove()・・・指定した値と同じ要素を検索し、最初の要素を削除する。
例
list = ['Ichiro', 'Jiro', 'Saburo', 'Shiro', 'Goro']
print(list)
# ['Ichiro', 'Jiro', 'Saburo', 'Shiro', 'Goro']
list.remove('Ichiro')
print(l)
# ['Jiro', 'Saburo', 'Shiro', 'Goro']
Pythonインタープリタにて以下のように入力した出力結果は?
>>>import reprlib
>>>reprlib.repr(set('diveintocode'))
答え
“{‘c’, ‘d’, ‘e’, ‘i’, ‘n’, ‘o’, …}”
- reprlibというモジュールをインポート
- reprlib.repr()関数で出力を制限(文字列が何のオブジェクトか分かるようにフォーマットし、順番も揃えてくれる関数)abc順になる。
- set()で、文字列をセット(重複は取り除かれる)
Pythonインタープリタにて以下のように入力した出力結果は?
>>>dic = 'i will be an engineer'.replace('engineer', 'i')
>>>dic
答え
‘i will be an i’
.replace(‘engineer’, ‘i’)で、 engineerをiに置換。
mutableなものをまとめたものは?
答え
リスト
ミュータブルとイミュータブル
- リスト・・・ミュータブル(変更可能)なデータ型
- 文字列、タプル・・・イミュータブル(変更不可)なデータ型
プログラムを実行した場合の出力結果は?
class Sample:
c_list = []
def add_c_list(self,data):
self.c_list.append(data)
print("出力結果:", end=" ")
sample1 = Sample()
sample1.add_c_list("データ1")
sample2 = Sample()
sample2.add_c_list("データ2")
for item_data in sample1.c_list:
print(item_data, end=" ")
答え
出力結果: データ1 データ2
- Sampleというクラスを作成
- 変数c_listに空のリスト [] を作成
- add_c_list関数を作成
- クラス変数自信(self)のc_listの末尾に(data)を追加
- 出力
- Sampleクラスから、sample1オブジェクトを作成
- sample1オブジェクトに対してadd_c_list()関数を適用 -> 文字列”データ1″は、dataへ
- Sampleクラスから、sample2オブジェクトを作成
- sample2オブジェクトに対してadd_c_list()関数を適用 -> 文字列”データ2″は、dataへ -> appendなので末尾に追加される
- for文の繰り返し