Python3 エンジニア認定基礎試験 – 3

2022年10月10日

□1. Python の特徴に関する次の記述のうち、誤っているものはどれか。

a. Python の特徴の一つが可読性の高さである。複雑な操作も単一文で表記可能であり、文のグルーピング
がインデントで行われるためコードの見通しが良いなど、プログラムを小さく読みやすく書けるようになっている。た
だ変数の宣言は必要であり行わないとエラーとなる。
b. 機械学習、AI、データ分析の分野で Python が用いられる理由の一つは、Numpy や pandas、
scikit-learn など機械学習向けのサードパーティ製パッケージやそれを用いた環境(Jupyter Notebook な
ど)が充実していることである。
c. Python は柔軟な配列や集合、ディクショナリといった、高水準のデータ型を組み込みで持つ。データ型の一
般性が高いため Python の対応可能な問題領域は Awk や Perl と比較して広い。
d. Python は簡単に使えるとはいえ本格的なプログラム言語であり、大きなプログラムを書くために提供された
構造やサポート、エラーチェック機構が、シェルスクリプトなどに比べはるかに多く存在する。
e. Python は Windows、MacOS、Linux など多くの環境で動作する、拡張可能なフリーのオープンソースソ
フトウェアである。

□2. Python インタープリタに関する次の記述のうち、誤っているものはどれか。

a. Python モジュールを呼び出すには、「python -m モジュール名 [引数] …」という方法があり、例えば
「python -m timeit -h」を実行すると、timeit モジュールの詳細が出力される。
b. インタープリタの起動方法として、「 python -cmd コマンド [引数] …」という方法があり、例えば
「python -cmd 'print(“hello")’」を実行すると、「hello」が出力される。
c. 対話モードの終了方法には、関数の入力によるものと、キー操作によるものとがある。前者の具体的な方
法は、quit()の入力である。後者の具体的な方法は、ファイル終端キャラクタの入力である。
d. インタープリタがスクリプト名(スクリプトのファイル名)と続く引数群を知らされると、これらは文字列のリスト
となる。import sys を実行することで、このリストにアクセスできる。
e. デフォルトでは、Python のソースファイルは UTF-8 でエンコードしてあるものとして扱われる。

□3. 数値に関する次の記述のうち、誤っているものはどれか。

a. ほとんどの演算子は左から演算が行われるが、例外的にべき乗は右から演算が行われる。例えば「48 // 6
// 4」の演算結果は「2」であり、「2 ** 1 ** 3」の演算結果は「2」である。
b. 切り下げ除算を行って整数解を得たい場合(剰余を捨てたい場合)は「//」演算子を使い、剰余のみを
得たい場合は「%」演算子を使う。
c. 等号(=)は、変数を代入するのに使う。変数に代入すると参照先が代入され、値のコピーは行われな
い。
d. 対話モードでは、最後に表示した式は変数「_」(アンダースコア)に代入される。
e. 整数は int 型、小数点を伴う数は float(浮動小数点数)型を持つ。演算対象の型が混合していた場
合、浮動小数点数は整数に変換される。また除算は常に float を返す。

□4. 次のコードの実行結果として正しいものはどれか。

v=1
w=2
v, w = w + 1, v + 3
x = w ** 2 + 1
y=x-8/2
z=y%5
print(w, y, z)

a. 6 2.5 0.5
b. 6 9 4.0
c. 6 33.0 3.0
d. 4 9 0.1
e. 4 13.0 3.0

□5. 文字列に関する次の記述のうち、誤っているものはどれか。なお「¥」はバックスラッシュに読み替えること。

a. Python の文字列は改変ができない「変更不能体(immutable)」なものであるが、文字列のインデック
ス指定(連番による指定)やスライシング(切取)は可能である。
b. 列挙された文字列リテラルは連結される。例えば対話モードで「>>> 'Py’ 'thon’」とした場合には、間に
スペースを挟んだ形で自動的に連結され「’Py thon’」(y と t の間に半角スペース)となる。
c. トリプルクオート「"""」を使うと、文字列リテラルを複数行にわたって書くことができる。docstring(ドキュメン
テーション文字列)でもこの記述方法が使われる。
d. バックスラッシュを前置した文字を特殊文字として解釈させないようにするには、raw 文字列を使う。具体
的には最初の引用符の前に「r」を置いて「print(r’C:¥some¥name’)」のように記述する。
e. 文字列は「*」で繰り返すことができる。「’He’ + 3 * 'y’」は対話型インタープリタで出力「’Heyyy’」が得ら
れる。

□6. 以下の結果を得たい場合、コードの【A】に入るものとして正しいものはどれか。

[実行結果]
Simlx

[ コード ]
Zen = 'SimpleIsBetterThanComplex’

print('{}{}{}’.format(【A】))

a. Zen[0:2], Zen[-5], Zen[-1]
b. Zen[0:2], Zen[-2], Zen[-1]
c. Zen[0:3], Zen[-3], Zen[-1:]
d. Zen[0:3], Zen[-2], Zen[-2:-1]
e. Zen[0:4], Zen[-3], Zen[-2]

□7. 次の変数 Zen に関して指定した場合、実行時にエラーとなるものはどれか。

Zen = 'NowIsBetterThanNever’

a. Zen[:]
b. Zen[60:80]
c. Zen[10]
d. Zen[:500] + 'Z’
e. Zen[10] = 'X’

□8. 次のコードの実行結果として正しいものはどれか。

a, b = 8, 10
while a > 0:
print(b, end=’,’)
a -= 2
b -= a

a. 10,4,0,-2,
b. 10,8,6,4,2,0
c. 10,8,6,4,2,0,-2
d. 10,4,0,
e. 10,4,

□9. 次のコードの出力結果として正しいものはどれか。

fruits = ['apple’, 'kiwi’, 'plum’]
for f in fruits[:]:
if len(f) < 5:
fruits.insert(0, f)
fruits.pop()

print(fruits, end = ' ')

a. ['kiwi’, 'apple’, 'plum’]
b. ['plum’, 'kiwi’, 'apple’]
c. ['plum’, 'apple’, 'kiwi’]
d. ['apple’, 'kiwi’, 'plum’]
e. ['apple’, 'plum’, 'kiwi’]

□10. 次のような結果を得たい場合、コードの【A】の行に入る適切なものはどれか。なお【A】に入るものは、
★a の行と同じ数の空白でインデントされている。

[ 実行結果 ]
Found an even number: 2
Found an odd number: 3
Found an even number: 4
Found an odd number: 5
Found an even number: 6

[ コード ]
for num in range(2, 7):
if num % 2 == 1:
print(“Found an odd number:", num) …★a
【A】
print(“Found an even number:", num)

a. continue
b. break
c. pass
d. break:
e. else:

□11. 次のような結果を得たい場合、コードの【A】に入る適切なものはどれか。

[ 実行結果 ]
1,-2,-5,-8,

[ コード ]
for i in range(【A】):
print(i, end=",")

a. 1, -8, -3
b. 1, -8, -2
c. 1, -10, -3
d. 4, -8, -2
e. 4, -10, -2

□12. 次の結果を得たい場合、コードの 2 行目以降を代替するものとして正しいものはどれか。なお各選択
肢の次の行には「 print(i, Zen[i]) 」が記述されるものとする。

[ 実行結果 ]
0 Simple
1 is
2 better
3 than
4 complex

[コード]
Zen = ['Simple’,’is’,’better’,’than’,’complex’]
for i, v in enumerate(Zen):
print(i, v)

a. for i,v in range(len(Zen)):
b. for i,v in range(Zen[0:5]):
c. for i in range(Zen[:]):
d. for i in range(Zen[0:5]):
e. for i in range(len(Zen)):

□13. 次のコードの実行結果として正しいものはどれか。

i=1
i=2

def f(arg = 3):
i=4
i=5
print(arg)

f(i)

a. 1
b. 2
c. 3
d. 4
e. 5

□14. 次のコードに関し、【A】の行の出力として正しいものはどれか。

def culc(a, b, squares=[], cubes=[]):
squares.append(a ** 2)
cubes.append(b ** 3)
return squares, cubes

print(culc(4, 1))
print(culc(3, 2))
print(culc(2, 3)) 【A】
print(culc(1, 4))

a. ([4], [27])
b. ([16,1], [9, 8], [4, 27])
c. ([1, 8, 27], [16, 9, 4])
d. ([8, 6, 4], [3, 6, 9])
e. ([16, 9, 4], [1, 8, 27])

□15. 次の関数を呼び出す際に、引数の指定として正しいものはどれか。

def location(city, state=’NewYork’, country=’USA’):
print(“I live in", country, “.")
print(“My company is located in",city,",",state,".")

a. location(state=’Tokyo’, 'chiyoda’)
b. location('San Francisco’, country=’USA’, state=’California’)
c. location('Jakarta’, 'Cikini’, latitude = '-6.1753942’)
d. location('Singapore’, city=’Marina Boulevard’)
e. location()

□16. 次の結果を得たい場合に、コード【A】に入るものとして適切なものはどれか。

[ 実行結果 ]
[(2, 'a’), (3, 'b’), (1, 'c’)]

[ コード ]
pairs = [(3, 'b’),(1, 'c’),(2, 'a’)]
pairs.sort(key =【A】)
print(pairs)

a. lambda arg : arg[0]
b. lambda arg[0] : arg
c. lambda arg[1] : arg
d. lambda arg : arg[1]
e. lambda arg : arg

□17. 次の記述のうち、誤っているものはどれか。

a. PEP8 では、クラスや関数には一貫した命名を行うべきであり、クラスには「CamelCase」を、関数やメソッド
には「lower_case_with_underscores」を使うべきとされている。
b. トリプルクート「"""」で関数内に記述された docstring の内容は、関数のdoc属性に文字列として
格納され、help 関数でドキュメントとして表示させることができる。
c. 関数注釈(アノテーション)は関数のannotations属性にリストとして格納され、注釈の内容によっ
ては関数のほかの部分に影響を与えることもある。
d. PEP 8 では、識別子に非 ASCII キャラクタを使うべきでないとされている。ASCII 範囲内で識別子として
有効な文字は、大文字と小文字のアルファベット、アンダースコア、0 から 9 の数字である。なお先頭文字は
数字以外でなければならない。
e. docstring の 1 行目は、常にオブジェクトの目的の短く簡潔な要約を記述し、2 行目以降がある場合、2
行目は空行としてようやくと他の記述を視覚的に分離すべきである。

□18. 次のコードの実行結果として正しいものはどれか。

a = [1,3,4,6,3,5]
a.insert(3, -1)
a.pop(4)
a.remove(3)
print(a)

a. [1, 4, -1, 5]
b. [1, 4, -1, 3, 5]
c. [1, 4, 6, 5, 3]
d. [1, 6, 3, 5, 3]
e. [1, 6, 5]

□19. コード A の 1 行目を代替するコード B がある。コード B の【A】~【C】のうち、【A】と【B】に入るものとし
て正しいものはどれか。

[ コード A ]
cubes = [ a ** 3 for a in range(5)]
print(cubes)

[ コード B ]
cubes = 【A】(【B】(【C】 a: a ** 3, range(5)))

a. 【A】set 【B】loop
b. 【A】dic 【B】loop
c. 【A】dic 【B】map
d. 【A】list 【B】loop
e. 【A】list 【B】map

□20. 次の実行結果を得たい場合に、コード 1 行目~5 行目を代替するものとして正しいものはどれか。

[ 実行結果 ]
[(3, 6), (3, 5), (2, 6), (2, 5), (1, 6), (1, 5)]

[ コード ]
combs = []
for x in [3,2,1]:
for y in [6,5]:
if x != y:
combs.append((x, y))

print(combs)

a. combs = [a,b for a in [3, 2, 1] for b in [6,5] if a != b]
b. combs = ([a,b] for a in [3, 2, 1] for b in [6,5] if a != b)
c. combs = [(a,b) for a in [6,5] for b in [3, 2, 1] if a != b]
d. combs = [a,b for a in [6,5] for b in [3, 2, 1] if a != b]
e. combs = [(a,b) for a in [3, 2, 1] for b in [6,5] if a != b]

□21. 次のような結果を得たい場合に、コードの 2 行目(★印の行)を代替するものとして正しいものはどれ
か。

[ 実行結果 ]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

[コード]
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
power = [[row[i] for row in matrix] for i in range(3)] …★

print(power)

a. power = zip[matrix] b. power = zip(matrix)
c. power = zip(list(matrix))
d. power = list(zip(*matrix))
e. power = list(zip(matrix))

□22. 次のコードの実行結果として正しいものはどれか。

Zen = 'NowIsBetterThanNever’
print(Zen[1:19:4])

a. Beav
b. BtTnv
c. oBeav
d. oBene
e. ostraer

□23. データ構造に関する次の記述のうち誤っているものはどれか。

a. 集合の生成には中カッコ{}または set()関数を使用する。ただし空の集合を生成するには、{}ではなく
set()を使う必要がある。例えば「empty = {}」とすると空のディクショナリが生成される。
b. ディクショナリに対する帰属性判定演算子「in」「not in」による判定において、「含まれるかどうか」の判定の
対象は「値」ではなく「キー」である。
c. リストと集合は変更可能(mutable)、タプルは変更不能(immutable)である。
d. ディクショナリは変更可能(mutable)であるが、キーの型は変更不能(immutable)であり、その値
は一意でなければならない。
e. ディクショナリにループをかけるときに enumerate()関数を使うと、キーとそれに対応した値を同時に得られ
る。

□24. 対話モードで入力したときに「True」が返されるものは次のうちどれか。

a. (1, 2, 5, 20, 30) > (2, 3, 4, 5)
b. 'PHP’ > 'Perl’ > 'Python’
c. 'Matplotlib’ > 'NumPy’ > 'pandas’ > 'scikit-learn’
d. (2,3,('aa’,’ab’)) < (2,3,('abc’,’a’),5) e. (-1, -10, -2, -5) > (-1, -2, -5)

□25. モジュールに関する次の記述のうち、正しいものはどれか。

a. sys.path が初期化されている場所は、PYTHONPATH とインストールごとのデフォルトであり、入力スクリプ
トのあるディレクトリは含まれない。
b. あるモジュールがインポートされるときにインタープリタが検索する順序は、まずビルトインモジュール、次に
sys.path 変数で得られるディレクトリ、そしてシンボリックリンクを置いてあるディレクトリである。
c. モジュール読み込みの高速化のため、Python はコンパイル済みのモジュールを「python_cache」デ
ィレクトリに module.バージョン名.py の名前でキャッシュする。
d. モジュールの中では、グローバル変数「modname」の値としてモジュール名(文字列)がセットされ
ている。
e. 実行中のスクリプトのあるディレクトリは、検索パスの最初、標準ライブラリのパスよりも前方に置かれる。

□26. あるディレクトリを、パッケージを含むものとして扱わせるために必要とされるファイルは次のうちどれか。

a. sub.py
b. dir.py
c. init.py
d. package.py
e. directory.py

□27. 入出力に関する次の記述のうち、誤っているものはどれか。

a. 文字列オブジェクトの rjust()メソッドは、文字列の左側にスペースを追加して、指定の幅に右揃えするもの
である。
b. 文字列オブジェクトの zfill メソッドは、プラスとマイナスの記号も含めて指定文字数となるように、数字の文
字列の左側をゼロでパディングするものである。
c. 標準モジュール json は、Python のデータ階層構造を取って文字列表現にコンバートすることができる。こ
のプロセスを「シリアライズ」という。シリアライズで文字列表現されたオブジェクトは、「デシリアライズ」という。
d. open()はファイルオブジェクトを返す関数である。open 関数は第 1 引数にファイル名を、第 2 引数にモー
ドを与えて使う。モードはファイルを読み込み専用で開くなら「r+」、書き出し専用なら「w」、追加なら「r」、読
み書き療養なら「a」を指定する。
e. 値を書き出す方法には、print()関数や write メソッドなどがある。出力のフォーマット方法には、文字列ス
ライシングと連結操作で行う方法や、format メソッドを利用する方法などがある。

□28. 次のスクリプトを実行して「整数 a:」に「3」、「整数 b:」に「b」を入力した場合の正しい結果はどれか。
なお選択肢中の「, 」は改行に読み替えること。

try:
int_a = int(input('整数 a:’))
int_b = int(input('整数 b:’))
print(int_a ** 2)
print((int_a ** 2) / int_b)
except(ZeroDivisionError) :
print('C’)
except(ValueError) :
print('D’)
except:
print('E’)
else:
print('F’)
finally:
print('G’)

a. D, E, F, G
b. D, F, G
c. E, F, G
d. D, G
e. G

□29. エラーと例外に関する次の記述のうち誤っているものはどれか。
a. raise 文を用いることで、指定の例外を意図的に発生させることができる。raise の引数は送出する例外を
示すものであり、例外インスタンスでも、Exception クラスの派生クラスであるクラス(例外クラス)でも構わな
い。
b. 発生した例外に値が付随することもあり、これを例外の引数と呼ぶ。except 節では、例外名の後に変数
を指定す るこ とができ る 。こ の変数に は例外イ ンスタンス が結び付け られてお り、例 外 インスタンスに は
str()」が定義してある。
c. [Ctrl]+[c]キーなどでユーザーがプログラムに割り込みをかけると、KeyboardInterrupt 例外が送出され
る。
d. パーサ(構文解釈器)は違反のある行を表示し、最初にエラーが検知された点に下線が引かれる。エラ
ーは矢印より前のトークンが原因である。
e. 例外のほとんどはプログラムでは処理されず、その結果はエラーメッセージにあらわれる。エラーメッセージの最
終行には、NameError、TypeError など例外の型が記されている。

□30. 次のコードを実行した場合には適切な方法で、あるクリーンアップがなされる。具体的にはどのような処
理がなされているか。

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

a. file.closed()
b. file.close()
c. file.clean()
d. f.closed()
e. f.close()

□31. 次の実行結果を得たい場合、コードの【A】【B】【C】【D】【E】に入る組み合わせとして適切なものはどれ
か。

[ 実行結果 ]
Magatama is a
Saya’s
reliable
partner

[コード]
class kusanagi(Exception):
pass

def raise_character(a):
print(“【A】")
raise kusanagi
print(“【B】")

def func(name: int):
try:
print(name, “【C】")
raise_character(name)
except kusanagi:
print(“【D】")
raise Exception

name = “Magatama"
try:
func(name)
except Exception:
print(“【E】")

a. 【A】reliable【B】Saya’s【C】is a【D】goofy【E】partner
b. 【A】reliable【B】goofy【C】is a【D】Saya’s【E】partner
c. 【A】Saya’s【B】reliable【C】is a【D】goofy【E】partner
d. 【A】Saya’s【B】goofy【C】is a【D】reliable【E】partner
e. 【A】goofy【B】reliable【C】is a【D】Saya’s【E】partner

□32. 次のスクリプトの実行結果として正しいものはどれか。なお各選択肢内は実際は改行されているものと
して読み替えること。

loc = “1"
def scope():
loc = “2"
def do_local():
loc = “3"
def do_nonlocal():
nonlocal loc
loc = “4"
def do_global():
global loc
loc = “5"

   do_local()
   print("【A】", loc)
   do_nonlocal()
   print("【B】", loc)
   do_global()
   print("【C】", loc)

print(“【D】", loc)
scope()
print(“【E】", loc)

a. 【A】 3 【B】 3 【C】 5 【D】 2 【E】 5
b. 【A】 3 【B】 2 【C】 5 【D】 2 【E】 1
c. 【A】 2 【B】 3 【C】 4 【D】 2 【E】 1
d. 【D】 1 【A】 2 【B】 4 【C】 4 【E】 5
e. 【D】 3 【A】 4 【B】 5 【C】 1 【E】 2

□33. 次の実行結果を得たい場合、コードの【A】【B】の行および【C】に入る組み合わせとして適切なものはど
れか。なお【A】は★a の行と同じ数の空白でインデントされている。

[ 実行結果 ]
Need Speed?
I’m Saya.
Need Speed?
I’m David.

[ コード ]
class kusanagi():
def s(self):
print(“Need Speed?") …★a
【A】
def m(self):
print(“I’m Saya.")

class wexal(kusanagi):
def 【B】:
print(“I’m David.")

k = kusanagi()
w = wexal()
k.s()
w.【C】

a. 【A】self(m) 【B】m(self): 【C】s()
b. 【A】self(m) 【B】self(m): 【C】s(self)
c. 【A】self.s() 【B】m(self): 【C】s(self)
d. 【A】self.m() 【B】m(self): 【C】s()
e. 【A】self.m() 【B】self(m): 【C】s()

□34. 次のファイル「script.py」を作成し、コマンドライン上で「python3 script.py one two three four
five」を実行したときの結果として正しいものはどれか。

[ script.py ]
import sys
print(sys.argv[0:4])

a. ['script.py’, 'one’, 'two’, 'three’]
b. ['script.py’, 'one’, 'two’, 'three’, 'four’]
c. ['python3’, 'script.py’, 'one’]
d. ['python3’, 'script.py’, 'one’, 'two’]
e. ['python3’, 'script.py’, 'one’, 'two’, 'three’]

□35. 次の正規表現を用いたコードの【A】の部分に入れたときエラーとなるものはどれか。
import re
prog = re.compile('(K|S)u(r|s)(a|o)nf?(a|o)(o|m)?g?i?(saya)?’, re.IGNORECASE)
【A】
print(ret[0])

a. ret = prog.search('KUSANAGISAYA’)
b. ret = prog.search('Kuronami’)
c. ret = prog.search('SuZunone’)
d. ret = prog.search('SUSANOO’)
e. ret = prog.search('kusanomi’)

□36. モジュールに関する次の記述のうち誤っているものはどれか。

a. processing モジュールを使うと、コード処理の実行時間を計測できる。
b. smtplib モジュールを使うと、任意のインターネット上のホストにメールを送ることができる。
c. random モジュールを使うと、疑似乱数を生成することができる。
d. urllib.request モジュールを使うと、URL にあるデータを取得することができる。
e. statistics モジュールを使うと、数値データの基本統計量(平均、中央値、分散など)を取得することがで
きる。

□37. 今日の日付を次の実行結果のように得たい場合、スクリプトの 1 行目【A】と 2 行目の【B】に入る適切
なものはどれか。

[ 実行結果 ]
2020-07-02

[ スクリプト ]
【A】
today = 【B】
print(today)

a. 【A】import date 【B】datetime.date(today)
b. 【A】from datetime 【B】date.today()
c. 【A】from datetime import date 【B】date.today()
d. 【A】import datetime from date 【B】datetime.today()
e. 【A】import date from datetime 【B】datetime.today()

□38. logging モジュールのメッセージの優先度として正しいものはどれか。左から順に優先度が高いものとす
る。

a. ERROR、CRITICAL、WARNING、INFO、DEBUG
b. ERROR、CRITICAL、WARNING、DEBUG、INFO
c. CRITICAL、ERROR、WARNING、DEBUG、INFO
d. CRITICAL、ERROR、WARNING、INFO、DEBUG
e. CRITICAL、WARNING、ERROR、INFO、DEBUG

□39. 仮想環境とパッケージに関する次の記述のうち正しいものはどれか。

a. pip install でパッケージ名を指定し、そのパッケージ名の後ろに「=」とバージョン名を付けると、そのバージョ
ンのパッケージをインストールできる。
b. 「pip upgrade パッケージ名」とすることで、当該パッケージを最新バージョンにアップグレードすることができ
る。
c. pip freeze はその仮想環境にインストールされたすべてのパッケージを表示する。pip list も同様の働きを
するが、両者は出力形式が異なる。pip list はその仮想環境にインストールされたすべてのパッケージを、pip
install 向けの形式で出力する。
d. pip uninstall にパッケージ名を指定すると、その仮想環境からパッケージを削除できる。削除対象となる
パッケージの複数指定はできない。
e. 仮想環境を作成、管理するのに使われるスクリプトは pyvenv である。

□40. 次の記述に関して正しいものはどれか。

a. デフォルト設定ではユーザーディレクトリの「.pyhistory」ファイルにヒストリが保存される。ヒストリは対話型イ
ンタープリタセッションで利用できる。
b. [Ctrl]+[t]キーを押すと補完機能が呼び出せる。この機能は Python の文(命令)の名前、現在のロー
カル変数、使用できるモジュール名を検索するものである。
c. 拡張された対話型インタープリタとして Bython がある。これはオブジェクト探索、高度なヒストリ管理などの
機能を持つ。
d. IPython は「pip install ipython」でインストールできる。IPython の対話モードは ipython コマンドで
起動できる。終了時は deactivate コマンドを実行すればよい。
e. 変数とモジュールの補完機能は、インタープリタの起動時に自動で有効になっている。