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

2022年10月10日

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

a. Python は柔軟な配列や集合、ディクショナリといった、非常に高水準のデータ型を組み込みで持つ。データ
型の一般性が高いため Python の対応可能な問題領域は Awk より広いが、Perl と比べると同程度である。
b. Python は簡単に使えるとはいえ本格的なプログラム言語であり、大きなプログラムを書くために提供された
構造やサポート、エラーチェック機構が、シェルスクリプトなどに比べはるかに多く存在する。
c. Python は Windows、MacOS、Linux など多くの環境で動作する、拡張可能なフリーのオープンソースソ
フトウェアである。
d. Python では、文のグルーピングはカッコで囲うことでなくインデントで行われるなど、プログラムを小さく読みや
すく書けるという特徴がある。
e. Python はインタープリタ言語であり、コンパイル等が必要でないため、プログラム開発における時間を節約し
てくれる。インタープリタは対話的に使うことも可能である。

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

a. 標準入力が tty デバイスに接続された状態で起動した場合は、コマンドを対話的に読み込んで実行するが、
引数にファイル名を与えたり、標準入力からファイルを与えて起動した場合は、このファイルに入った「スクリプト」
を読み込んで実行する。
b. インタープリタがスクリプト名(スクリプトのファイル名)と続く引数群を知らされると、これらは文字列のリスト
となる。import listitems を実行することで、このリストにアクセスできる。
c. デフォルトの設定では、プライマリプロンプトの記号は「>>>」、セカンダリプロンプトの記号は「…」である。
d. インタープリタを対話モードで起動すると、はじめにバージョンと著作権からはじまるメッセージが表示され、そ
の後にプライマリプロンプトが表示される。
e. プログラムの冒頭で「# coding: (エンコーディング方式)」のようにすると、デフォルト以外のエンコーディン
グを使うことも可能である。

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

a. 演算を行うための「 + 」や「 – 」などの記号はオペランドと呼ばれ、演算の対象は演算子と呼ばれる。
b. 切り下げ除算を行って整数解を得たい場合(剰余を捨てたい場合)は「 / 」を使い、剰余のみ得たい場
合は「 // 」を使う。
c. 変数は、定義(値の代入)や宣言がなされないまま使おうとするとエラーとなる。
d. 整数は int という型を持つ。小数点を伴う数は float という型を持つ。除算は常に float を返す。
e. 対話モードでは、最後に表示した式を変数「**」(アスタリスク 2 つ)に代入してある。

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

a=2
b = a ** 3
c=b/2+3
d = 10
e = d // b
f=d%c
print ('{1}, {0}’.format(e, f))

a. 3.0, 1
b. 3.0, 1.25
c. 1.0, 1.25
d. 4.0, 1
e. 1.6666666666666667, 1

□5. 文字列に関する次の記述のうち、正しいものはどれか。なお「\」はバックスラッシュに読み替えること。
a. バ ッ ク ス ラ ッ シ ュ を 前 置 し た 文 字 が 特 殊 文 字 に 解 釈 さ れ る の が 嫌 な 時 は 、 最 初 の 引 用 符 の 前 に
「print(raw’C:\some\name’)」のように「raw」を記述する。
b. 文字列リテラルを複数行にわたり書く一つの方法は、トリプルクオートを使う方法である。最初の改行などの
行末文字が文字列に含まれることを避けたい場合は、行末に「-」を置く。
c. 変数と文字列リテラルの連結、そして変数同士の連結には「.」(ドット)を使う。
d. 文字列は「*」で繰り返すことができる。「’w’ + 3 * 'o’」は対話型インタープリタで出力「wwwo」が得られ
る。
e. 対話型インタープリタでは文字列は引用符に囲まれ、特殊文字はバックスラッシュでエスケープされた状態で
出力される。print()関数では全体を囲む引用符が除去され、エスケープ文字や特殊文字がプリントされた状
態で出力される。

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

[実行結果]
sNow

[ コード ]
Zen = 'NowIsBetterThanNever’
print('{}{}{}’.format(【A】))

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

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

Zen = 'BeautifulIsBetterThanUgly’
a. Zen[1000:10000]
b. Zen[50]
c. Zen[10] = 'a’
d. Zen['B’]
e. Zen[1:10] + b

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

a, b = 0, 1
while a < 10:
print(a, end=’,’)
a, b = b, a+b

a. 1,1,2,3,5,8,
b. 0,1,1,2,3,5,8,
c. 1,2,3,5,8,13,
d. 0,1,2,3,5,8,
e. 0,1,2,2,3,5,

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

months = ['January’, 'March’, 'May’, 'July’]
months.append('September’)
for month in months[:]:
if len(month) > 5:
months.insert(0,month)

print(months, end = ")

a. ['March’, 'January’, 'January’, 'March’, 'May’, 'July’]
b. ['March’, 'January’, 'January’, 'March’, 'May’, 'July’, 'September’]
c. ['September’, 'March’, 'January’, 'January’, 'March’, 'May’, 'July’, 'September’]
d. ['September’, 'January’, 'January’, 'March’, 'May’, 'July’, 'September’]
e. ['September’, 'March’, 'January’, 'May’, 'July’]

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

[ 実行結果 ]
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

[ コード ]
for n in range(2, 10):
for x in range(2 ,n): …★b
if n % x == 0:
print(n, 'equals’, x, '*’, n//x) …★a
【A】
【B】
print(n,’is a prime number’)

a. 【A】continue 【B】 else:
b. 【A】continue 【B】 else
c. 【A】break 【B】 each:
d. 【A】break: 【B】 else
e. 【A】break 【B】 else:

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

for i in range(-3, -18, -3):
print(i, end=", “)

a. -3, 0, 3, 6, 9, 12, 15,
b. -3, -6, -9, -12, -15, -18,
c. -3, -6, -9, -12, -15,
d. -6, -9, -12, -15, -18,
e. -6, -9, -12, -15,

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

[ 実行結果 ]
0 Now
1 is
2 better
3 than
4 never

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

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

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

i=1
i=2

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

i=4
i=5

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(2,2))
print(culc(3,3))
print(culc(4,4)) 【A】
print(culc(5,5))

a. ([16], [64])
b. ([4, 8], [9, 27], [16, 64])
c. ([4, 6, 8], [6, 9, 12])
d. ([4, 9, 16], [8, 27, 64])

e. ([8, 27, 64], [4, 9, 16])

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

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

a. location(city=’chiyoda’, state=’Tokyo’, zipcode=’1000004′)
b. location(state=’California’, country=’USA’, 'San Francisco’)
c. location(state=’Jakarta’, city=’Cikini’)
d. location('Geelong’, city=’Melbourne’)
e. location()

□16. 次のコード 1 行目の【A】【B】に入る組み合わせとして正しいものはどれか。

[ コード ]
def shop(name,【A】, 【B】):
print(“flowershop:", name)
keys = sorted(argsX.keys())
for kw in keys:
print(kw, “:", argsX[kw])
for Y in argsY:
print(Y)

shop(“Iris","Open: 9:30 am","Close: 10:30 pm","Monday and holidays are
closed.",bouquet="Sunflower",plants="Pachira",dried="Rose")

a. 【A】argsX 【B】argsY
b. 【A】argsY 【B】argsX c. 【A】argsY 【B】argsX
d. 【A】argsX 【B】argsY e. 【A】argsX 【B】argsY

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

a. 関数注釈(アノテーション)は関数のannotations属性にディクショナリとして格納され、関数のほ
かの部分にはいかなる影響も及ぼさない。
b. 例えば「def func(a: int, b:str) -> value」と関数を記述したときにアノテーションに該当するものは「->
value」のみである。
c. docstring の 1 行目は、常にオブジェクトの目的の短く簡潔な要約を記述し、大文字で始まりピリオドで終
わる行とすべきである。
d. docstring に 2 行目以降がある場合、2 行目は空行としてようやくと他の記述を視覚的に分離すべきであ
る。
e. PEP 8 では、演算子の周囲やカンマの後ろにはスペースを入れるが、カッコのすぐ内側にはスペースを入れる
べきではないとされる。
□18. 次の結果を得たい場合に、コードの 1 行目~3 行目を代替するものとして正しいものはどれか。

[ 実行結果 ]
[0, 9, 36, 81]

[ コード ]
squares = []
for x in range(0, 10, 3):
squares.append(x ** 2)

print(squares)
a. squares = [x in x ** 2 for range(0, 10, 3)]
b. squares = [x for x ** 2 in range(0, 10, 3)]
c. squares = [x ** 2 in x for range(0, 10, 3)]
d. squares = [x ** 2 for range(0, 10, 3) in x]
e. squares = [x ** 2 for x in range(0, 10, 3)]

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

[実行結果]
[(1, 4, 8), (3, 9, 27), (5, 25, 125)]

[コード]
matrix = [[1, 3, 5], [4, 9, 25], [8, 27, 125]]
power = [[row[i] for row in matrix] for i in range(3)] ★
print(power)

a. power = list(zip(matrix)) b. power = list(sum(matrix))
c. power = list(zip(matrix))
d. power = set(sum(*matrix))
e. power = set(sum(matrix))

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

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

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

print(combs)

  1. combs = [(a,b) in a for [1,2,3] in b for [3,2,5] if a != b]
  2. combs = [[a,b] for a in [3,2,5] for b in [1,2,3] if a = b]
  3. combs = [(a,b) for list[1,2,3] for list[3,2,5] if a != b]
  4. combs = [(a,b) for a in [1,2,3] for b in [3,2,5] if a != b]
  5. combs = [[a,b] in a for [1,2,3] in b for [3,2,5] if a = b]

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

list = [-10, 1, 15, 20, 30]
list.append(50)
list.sort(reverse = True)
list.insert(2,5)
list.pop(-1)
print(list)

a. [50, 2, 30, 20, 15, 1]
b. [50, 30, 20, 15, 1, -10]
c. [50, 30, 5, 20, 15, 1]
d. [-10, 1, 5, 15, 20, 30]
e. [30, 20, 15, 5, 1, -10]

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

Zen = 'FlatIsBetterThanNested’
print(Zen[0:20:3])

a. FItTNe
b. tBtTns
c. FtBtTnsd
d. FtBtTns
e. FItTN

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

a. ディクショナリに対する帰属性判定演算子「in」「not in」による判定において、「含まれるかどうか」の判定の
対象は「キー」ではなく「値」である。
b. 「set = {} 」において{}は空集合を生成する式であり、{}は空辞書を生成することはできない。
c. リストとタプルは変更可能(mutable)、集合は変更不能(immutable)である。
d. ディクショナリは変更不能(immutable)であるが、キーの型は変更可能(mutable)であり、その値
は一意でなければならない。
e. リストとタプルは順序を持つ要素の集まりであるという共通点がある。

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

a. (-1, -10, -3, -4) > (-1, -2, -5)
b. 1 > -1 == (1-2)
c. (1, 2) > (1, 2, -1)
d. 'Matplotlib’ > 'NumPy’ > 'pandas’ > 'scikit-learn’
e. ('bb’, 'c’) > ('bcd’, 'a’)

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

a. パッケージとは、「ドット区切モジュール名」を使って、Python のモジュールを構築する方法である。
b. あるモジュールがインポートされるときにインタープリタが検索する順序は、まずビルトインモジュール、次に
sys.path 変数で得られるディレクトリである。シンボリックリンクを置いてあるディレクトリはモジュール検索パスに
入らない。
c. sys.path が初期化されている場所は、入力スクリプトのあるディレクトリ、PYTHONPATH であり、インスト
ールごとのデフォルトは含まれない。
d. Python はソースファイルの最終更新日時をコンパイル済みのバージョンと比較し、再コンパイルが必要か判
断する。これは完全に自動的に行われる。
e. コンパイル済みのモジュールはプラットフォーム非依存なので、ひとつのライブラリを異なるアーキテクチャのシス
テム間で共有できる。

□26. モジュールが定義している名前を対話モードで確認したい。次のコードの2行目【A】に入るものとして正
しいものはどれか。

import sys
【A】

a. mod(systems)
b. mod(sys)
c. mod()
d. dir(mod)
e. dir(sys)

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

import math
print('{1:.5f}, {0:.3f}’.format(math.pi, math.e))

a. 3.142, 2.71828
b. 3.14159, 2.718
c. 2.71828, 3.142
d. 2.718, 3.14159
e. 1:3.14159f, 0:2.718f

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

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

a. 27, 0, C, E, F, G
b. 27, 0, C, F, G
c. 27, C, E, F, G
d. 27, F, G
e. 27, C, G

□29. エラーと例外に関する次の記述のうち誤っているものはどれか。

a. raise 文を用いることで、指定の例外を意図的に発生させることができる。raise の引数は送出する例外を
示すものであり、例外インスタンスでも、Exception クラスの派生クラスであるクラス(例外クラス)でも構わな
い。
b. 発生した例外に値が付随することもあり、これを例外の引数と呼ぶ。except 節では、例外名の後に変数
を指定することができる。この変数は例外インスタンスに結び付けられており、instance.args に例外インスタ
ンス生成時の引数が格納される。
c. [Ctrl]+[C]キーなどでユーザーがプログラムに割り込みをかけると、KeyError 例外が送出される。
d. パーサ(構文解釈器)は違反のある行を表示し、最初にエラーが検知された点を小さな矢印で示す。エ

                                 29

ラーは矢印より前のトークンが原因である。
e. 例外のほとんどはプログラムでは処理されず、その結果はエラーメッセージにあらわれる。エラーメッセージの最
終行には、NameError、TypeError など例外の型が記されている。

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

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

a. close(“file.txt")
b. file.close()
c. file.clean()
d. f.close()
e. f.clean()

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

[ 実行結果 ]
David is a
strategic
AI

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

name = 'David’

def func(name: int):
try:
if name != 0:
raise_his_character(name)
except wexal:
print('【A】’)
raise Exception
def raise_his_character(a):
print(a, '【B】’)
raise wexal
print('【C】’)

try:
func(name)
except Exception:
print('【D】’)

a. 【A】strategic 【B】is a 【C】naughty boy 【D】AI
b. 【A】is a 【B】strategic 【C】naughty boy 【D】AI
c. 【A】strategic 【B】is a 【C】AI 【D】naughty boy
d. 【A】naughty boy 【B】is a 【C】strategic 【D】AI
e. 【A】AI 【B】strategic 【C】is a 【D】naughty boy

□32. 次のコードの実行結果として正しいものはどれか。なお各選択肢内は改行されているものとして読み替
えること。

def scope():
loc = “init"
def do_local():
loc = “local"
def do_nonlocal():
nonlocal loc
loc = “nonlocal"
def do_global():
global loc
loc = “global"

   do_local()
   print("A:", loc)
   do_nonlocal()
   print("B:", loc)
   do_global()

print(“C:", loc)

scope()
print(“D:", loc)

a. A: init B: local C: nonlocal D: global
b. A: init B: nonlocal C: nonlocal D: global
c. A: init B: local C: global D: global
d. A: local B: nonlocal C: global D: global
e. A: local B: nonlocal C: nonlocal D: global

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

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

[ コード ]
class kusanagi():
def s(self):
print(“Need Speed?") …★a
【A】
def m(self): …★b
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()
c. 【A】self(m) 【B】m(self): 【C】s()
d. 【A】self(m) 【B】self(m): 【C】s(self)
e. 【A】self.s() 【B】m(self): 【C】s(self)

□34. コマンドライン上で「python3 script.py one two three four five」を実行したときに、以下の結果
を得たい。コード2行目の【A】に入るものとして正しいものはどれか。

[ 実行結果 ]
['script.py’, 'one’, 'two’]

[ script.py のコード ]
import sys
print(【A】)

a. sys.argv[0:2]
b. sys.argv[0:3]
c. sys.argv[1:3]
d. sys.args[1:3]
e. sys.args[1:4]

□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('KUSANAGI’)
b. ret = prog.search('Kuronami’)
c. ret = prog.search('kurofune’)
d. ret = prog.search('SUSANOO’)
e. ret = prog.search('kusanomi’)

□36. 対話モードで random モジュールを用い以下のような各結果を得たい場合、各コード【A】~【C】に入
る正しい組み合わせはどれか。

import random
random.【A】(['apple’, 'pear’, 'banana’])
'apple’
random.【B】(range(10),3)
[3, 7, 5]
random.【C】(5)
4

a. 【A】choice 【B】random 【C】rand
b. 【A】choice 【B】sample 【C】rand
c. 【A】choice 【B】sample 【C】randrange
d. 【A】sample 【B】choice 【C】rand
e. 【A】sample 【B】random 【C】randrange

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

[ 実行結果 ]
2020-06-27

[ コード ]
【A】
now = 【B】
print(now)

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

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

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

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

a. pip install でパッケージ名を指定し、そのパッケージ名の後ろに==とバージョン名を付けると、そのバージョ
ンのパッケージをインストールできる。
b. pip install –upgrade とすることで、当該パッケージを最新バージョンにアップグレードすることができる。
c. 「pip list パッケージ名」で、ある特定のパッケージの詳細情報が表示される。
d. pip uninstall にパッケージ名を指定すると、その仮想環境からパッケージを削除できる。削除対象となる
パッケージの複数指定も可能である。
e. pip freeze はその仮想環境にインストールされたすべてのパッケージを、pip install 向けの形式で出力す
る。

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

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