Python3エンジニア認定基礎試験 難問特集

第11問 / 40問
クリーンアップ動作を定義してあるオブジェクトに対して、クリーンアップ動作を保証した形で利用するための構文で適切なものを選びなさい。

A. together
B. follow
C. with
D. open

解答:C

with文とは、例外処理をハンドリングするために利用されるPythonの構文で、特定の処理の前処理と後処理を設定することで、その処理をより簡潔かつ安全に利用できるようにするものと表現することができます。

この構文を利用することで、ファイルなどのよく利用するデータの扱いをスッキリ書くことができるようになります。Pythonでのファイルの扱いは、以下のようなステップに分けられます。

  1. 指定されたファイルを開く(前処理)
  2. ファイルを用いた処理をする(本処理)
  3. 指定されたファイルを閉じる(後処理)

「ファイルを開く処理」、「ファイルを閉じる処理」は、毎回やらなければいけない処理です。
with文を使わない場合は、3つ処理を各々記述しなければなりません。しかし、with文を使えばよりシンプルな書き方をすることができます。
まずは、with文を使わない例です。ファイルはopen()という組み込み関数を使って開くことができます。 指定した名前のファイルの中身をprint()で表示してみます。

try:
    f = open('sample.txt', 'r') # 前処理
    print(f.read())                    # 本処理
finally:
    f.close()                     # 後処理

with文を用いた書き方に変えてみます。

with open('sample.txt', 'r') as f:
    print(f.read())

open()という関数はwith文の処理に対応しているので、上記のように書き直すことができます。
with文を使うことで、withブロックを抜けたときに自動的にファイルのclose()関数が呼び出されます。close()関数の書き忘れを防止した上で簡潔にファイルの処理を書くことができています。
また、仮に処理の途中で例外が発生してしまった場合にも、with文の中の処理であればファイルの閉じ忘れもなく、メモリの解放も行ってくれるため、効率的な処理にすることができます。つまり、with句はクリーンアップ動作を保証してくれます。
together句、follow句のようなものはありません。

第15問 / 40問
以下のプログラムを実行した際の出力結果を選びなさい。

list = [5, 3, 1, 2, 3, 4, 5, 2]
list.remove(2)
print(list)

A. [5, 3, 1, 3, 4, 5]
B. ValueError:
C. [5, 3, 2, 3, 4, 5, 2]
D. [5, 3, 1, 3, 4, 5, 2]

解答:D

removeメソッドの引数は、インデックス番号ではなく「オブジェクト」です。
「2」という値を持つ要素を先頭から検索し、見つかったら削除します。

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

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]
解答:B

removeメソッドの引数は、インデックス番号ではなく「オブジェクト」です。
「3」という値を持つ要素を先頭から検索し、見つかったら削除します。

  1. 次のような結果を得たい場合、コードの【A】の行に入る適切なものはどれか。なお【A】に入るものは、★の行と同じ数の空白でインデントされている。
[ 実行結果 ]
2 is a prime number
3 is a prime number
4 equals 2 * 2

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

A. then:
B. elseif:
C. else:
D. elif:
E. continue:

解答:E

  1. 次の実行結果を得たい場合、コードの【A】【B】に入る組み合わせとして適切なものはどれか。
[ 実行結果 ]
Saya is a
intelligent
speedster.

[コード]
class OurException(Exception):
pass
def raise_her_exception(a):
print(a, ‘is a’)
raise 【A】
print(‘easygoing person.’)
def func(key: int):
try:
if key == 0:
raise_her_exception(‘Saya’)
except OurException as e:
print(‘intelligent’)
raise 【B】

key = 0
try:
func(key)
except Exception as f:
print(‘speedster.’)

【A】OurException 【B】Exception
【A】Exception 【B】OurException
【A】Exception 【B】raise_her_exception
【A】何も入らない 【B】Exception
【A】何も入らない 【B】何も入らない
解答:A

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

Zen = ‘BeautifulIsBetterThanUgly

A. Zen[1000:10000]
B. Zen[50]
C. Zen[10] = ‘a’
D. Zen[‘B’]
E. Zen[1:10] + b
解答:A.

オーバーした数を指定した場合
Zen[1000:] # スタートの数がないので何も出力されない
''
Zen[:1000] # 0~最後までという指定になる
'BeautifulIsBetterThanUgly'
Zen[1000:1000] # スタートの数がオーバーしている
''
  • 正答
    • Zen[1000:10000]
  1. 次の実行結果を得たい場合に、コードの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))
解答:A

Pythonの組み込み関数zip()は複数のイテラブルオブジェクト(リストやタプルなど)の要素をまとめる関数。forループで複数のリストの要素を取得する際などに使用します。複数のイテラブルを並行に反復処理し、各イテラブルの要素からなるタプルを生成します。
以下はプログラム例です。

for item in zip([1, 2, 3], ['sugar', 'spice', 'everything nice']):
    print(item)
(1, 'sugar')
(2, 'spice')
(3, 'everything nice')
  1. 次のような結果を得たい場合に、コードの2行目(★印の行)を代替するものとして正しいものはどれか。
[ 実行結果 ]
[(1, 4, 7), (2, 5, 8), (3, 6, 9)] [コード]
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
power = [tuple(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))
解答:D

list(zip(*matrix))とlist(zip(matrix))の違い

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
power = list(zip(matrix)) 
print(power)
[([1, 2, 3],), ([4, 5, 6],), ([7, 8, 9],)]
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
power = list(zip(*matrix)) 
print(power)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
  1. 次の実行結果を得たい場合に、コード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)

A. ombs = [(a,b) in a for [1,2,3] in b for [3,2,5] if a != b]
B. combs = [[a,b] for a in [3,2,5] for b in [1,2,3] if a = b]
C. combs = [(a,b) for list[1,2,3] for list[3,2,5] if a != b]
D. combs = [(a,b) for a in [1,2,3] for b in [3,2,5] if a != b]
E. combs = [[a,b] in a for [1,2,3] in b for [3,2,5] if a = b]
解答:D

combs = [(a,b) for a in [1,2,3] for b in [3,2,5] if a != b]
print(combs)
[(1, 3), (1, 2), (1, 5), (2, 3), (2, 5), (3, 2), (3, 5)]
  1. 次の実行結果を得たい場合に、コード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]
解答:E

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

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
解答:B

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

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
解答:D

  1. 次の実行結果を得たい場合、コードの【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)
解答:A

  1. 次の実行結果を得たい場合、コードの【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()
解答:A

  1. 対話モードで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
解答:C

choice()は要素を一つ選択

sample()choices()は複数の要素を選択

sample()は重複なしの非復元抽出

choices()は重複ありの復元抽出。

random.random() (0.0以上1.0未満の浮動小数点数)

random.uniform()(任意の範囲の浮動小数点数)

random.randrange() (任意の範囲・ステップの整数)

random.randint()(任意の範囲の整数)

  1. 次の結果を得たい場合に、コード【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
解答:D

  1. コード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
解答:E

cubes = [ a ** 3 for a in range(5)]
print(cubes)
[0, 1, 8, 27, 64]

同様の結果となるのは、下記になります。

cubes = list(map(a:a**3,range(5)))
print(cubes)

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

関連記事

コメント

この記事へのコメントはありません。