LoginSignup
0
0

Python3エンジニア認定試験 模擬ひたすら解いてみた

Last updated at Posted at 2024-01-26

最後にひたすら模擬を解いて、間違えた問題の理解をしました。

ExamApp 模擬試験アプリ Python3エンジニア認定試験 基礎・初級
ExamApp 模擬試験アプリ Python3エンジニア認定試験 基礎・中級
ExamApp 模擬試験アプリ Python3エンジニア認定試験 基礎・上級

開始日 レベル 正解率
2024年01月24日11時11分 初級 92%
2024年01月24日14時00分 中級 97%
2024年01月24日16時25分 上級 82%

ディープロ Python3エンジニア認定基礎試験

開始日 正解率
2024-01-25 11:13 90%
2024-01-25 14:18 97%

PRIME STUDY 第1回 Python 3 基礎 模擬試験

開始日 スコア
2024-01-25 16:30 100点

PRIME STUDY 第2回 Python 3 基礎 模擬試験

開始日 スコア
2024-01-26 13:10 80点

見直し

●次のコードを実行した結果として、正しいものはどれか。
area = [x ** 2 for x in range(3)]

print(area)

【正答】
[0, 1, 4]

【解説】
リストの要素に対して一つずつ処理を加えたい場合は、リスト内包表記を使うと簡潔に記述できます。
リスト内包表記の構文は「[式 for 任意の変数名 in イテラブルオブジェクト]」です。
問題文の場合は「0、1、2」のイテラブルオブジェクトに対して、一つずつ式の処理を加えた後、結果をリストで返します。
問題文のコードを通常のfor文で記述すると以下になります。

area = []
for x in range(3):
    area.append(x ** 2)
print(area)
●あるモジュールが定義している関数をすべて取り込む記述はどれか。

【正答】

from module import *

【解説】
fromでファイル(モジュール)を読み込んで、importでファイル内の関数(オブジェクト)を取り込む

●次のコードを実行した結果として、正しいものはどれか。
class Greet():
    def say():
        print('Hello')

sample = Greet()

sample.say()

【正答】
エラーになる。

【解説】
問題文のコードは「TypeError: Greet.say() takes 0 positional arguments but 1 was given」のエラーが表示されます。

クラスにメソッドを定義する場合、メソッドの第一引数でインスタンス自身(問題文ではsample)を受け取る必要があります。

そのため、以下のように二行目を「def say(self):」とすることで、sayメソッドが実行されて「Hello」が表示されます。

class Greet():

    def say(self): 
    【3】 selfでsampleを受け取る

        print('Hello')
        【4】 print文を実行

sample = Greet()
【1】 クラスをインスタンス化

sample.say()
【2】 sayメソッドを実行

なお、メソッドの第一引数の名前は慣習で「self」を使います。

●次のコードを実行した結果として、正しいものはどれか。
def job(arg, /):
    print(arg)

job(arg=5)

【正答】
エラーになる。

【解説】
「/」は、その前が位置引数だけであることを示す記号です。

問題文のようにキーワード引数(arg=5)を渡すと、「TypeError: job() got some positional-only arguments passed as keyword arguments: 'arg'」とエラーになります。

●次のコードを実行した結果として、正しいものはどれか。
x = 10

if x == 10:
    print('a')
    if x <= 10:
        print('b')
        if x > 10:
            print('c')
        elif x == 10:
            print('e')
            if x >= 10:
                print('d')
else:
    print('f')

【回答】
a
b
e
d

【解説】
ネストされたif文は、条件を満たす限り次のif節に進み、条件が満たされなかった時点でif文を抜けます。

問題文の場合は6行目の「if x > 10:」がFalseになりますが、同じ階層に「elif x == 10:」があり、こちらは条件を満たしているためelif節の中の処理が実行され、次の階層のif節に続きます。

最後のelse節は、同じ階層のif節が実行されているため処理されません。

●関数のドキュメンテーション文字列とアノテーションについて、正しいものはどれか。
【選択 1】
関数のドキュメンテーションは以下の記述で表す。

def job():
    # job is a function
    pass
    
【選択 2】
インタープリタでドキュメンテーションを参照する場合は、man()関数を使う。

【選択 3】
デフォルト値付き引数のアノテーションは以下の記述で表す。

def job(kwarg: str = 'kwarg'):
    pass

【選択 4】
返り値のアノテーションは 以下の記述で表す。

def job(arg) => str:
    return arg

【正答】
選択肢3

【解説】
【選択肢1】
関数のドキュメンテーション文字列は「# コメント」ではなく、「''' 〜 '''」で記述します。

【選択肢2】
man()関数ではなくhelp()関数を使います。

【選択肢3】
デフォルト値付き引数のアノテーションの正しい使い方です。

【選択肢4】
返り値のアノテーションは「=> 」ではなく「->」で記述します。

なお、アノテーションとは型ヒントのことを指します。Pythonは、変数に対してintやstrなどの型を限定するための標準的な構文がありませんが、アノテーションを記述すると、外部モジュールや外部ツールを使って、型のチェックができるようになります。

(公式書籍 p.40-41)

●以下のコードを実行して「[0, 3]」の結果を得たい場合、★★★に入る関数はどれか。
number = [1, 2, 3, 1, 2, 3]

print([i for i, x in ★★★(number) if x == 1])

【選択 1】
index

【選択 2】
enumerate

【選択 3】
pop

【選択 4】
unpack

【回答】
選択 2
enumerate

【解説】
[0, 3]は、[1, 2, 3, 1, 2, 3]の「1」のインデックス番号で取得します。

問題文のように、リスト内包表記でenumerate()関数を使い、「x == 1」に一致するすべてのインデックス番号を得ると、結果は[0, 3]になります。

問題文をfor文で記述すると以下となります。

number = [1, 2, 3, 1, 2, 3]
list = []

for i, x in enumerate(number):
    if x == 1:
        list.append(i)    

print(list)

なお、list.index(x)もxのインデックス番号を返しますが、先頭から探索して最初に一致したxのインデックス番号しか返しません。

(公式書籍 p.40、55)

●モジュールとパッケージに関する説明で、誤っているものはどれか。

【選択 1】
モジュールがインポートされるとき、インタープリタは「ビルトインモジュール → sys.path変数で得られるディレクトリのリスト」の順に検索する。

【選択 2】
モジュールの読み込みを高速化するために、Pythonはコンパイル済みのモジュールを__pycache__ディレクトリに「module.バージョン名.pyc」の名前でキャッシュする。

【選択 3】
あるディレクトリをパッケージを含むものとして扱わせるには「__ initial__.pyファイル」が必要である。

【選択 4】
「from パッケージ import アイテム」の構文を使うとき、アイテムはパッケージのサブモジュールでもいいし、関数、クラス、変数など、パッケージで定義された他の名前でも良い。

【回答】
選択肢3が正解です。

【解説】
パッケージは、「__ initial__.py」ではなく「__init __.py」の名前でファイルを作成して初期化します。
他の選択肢は正しい説明です。

(公式書籍 p.63-68)

●次のコードを実行した結果として、正しいものはどれか。
def func():
    try:
        a = b
        print('A')
    except Exception:
        print('B')
    else:
        print('C')
    finally:
        print('D')

func()

【回答】
B
D

【解説】
問題文は、try節の「a = b」のbが定義されていないため、NameErrorが発生します(「a = 'b'」であればエラーになりません)。

NameErrorは、すべての例外の親クラスである「Exception」で補足されるため、print('B')が実行されます。

try節で例外が発生した場合、try節の残りの文はスキップされるため、print('A')は実行されません。

try文のelse節は、try節が実行されて例外が発生しなかったときに実行されるため、print('C')は実行されません。

finally節は、try節で例外が発生しても発生しなくても必ず実行されるため、print('D')が実行されます。

(公式書籍 p.93)

●try文のfinally節に関する説明で、誤っているものはどれか。

【選択 1】
try節の実行中に例外が起きた場合、この例外はexcept節で処理される。例外がexcept節で処理されなかった場合、この例外はfinally節の実行後に再送出される。

【選択 2】
例外はexcept節やelse節の実行中に発生することがある。この場合は、発生した例外はfinally節の実行後に再送出されない。

【選択 3】
try文がbreak文、cntinue文、return文に遭遇した場合、finally節はbreak文、continue文、return文の実行直前に実行される。

【選択 4】
finally節がreturn文を含んでいた場合、返り値はこのfinally節のreturn文からのものとなり、try節のreturn文からの値は返されない。

【回答】
選択 2

【解説】
except節やelse節の実行中に例外が発生した場合は、finally節の実行後に該当の例外が再送出され、プログラムが終了します。

そのため、finally節でファイルのクローズ処理などを記述しておけば、except節で例外が発生してもファイルをクローズできます。

他の選択肢は正しい説明です。

(公式書籍 p.93)

●正規表現のパターンマッチングで使う特殊文字について、正しいものはどれか。

【選択 1】
 \w 数字
 $ 先頭
 {m} m回の繰り返し

【選択 2】
 \d 数字
 ^ 先頭
 + 1文字以上の繰り返し

【選択 3】
 + 0文字以上の繰り返し
 [...] 指定したいずれかの文字
 (x|y) xかyの選択

【選択 4】
 $ 末尾
 * 0文字以上の繰り返し
 ^[...] 指定したいずれかの文字以外

【回答】
選択肢2が正解です。

【解説】
正規表現でよく使う特殊文字は以下となります。

\d 数字
\w 任意の英数字
. 任意の1文字
^ 先頭
$ 末尾
* 0文字以上の繰り返し
+ 1文字以上の繰り返し
{m} m回の繰り返し
[...] 指定したいずれかの文字
[^...] 指定したいずれかの文字以外
(x|y) xかyの選択
●以下のプログラムを実行した際の出力結果を選びなさい。
d = 'diveinto'

d + 'code'

print(d)

【回答】
diveinto

【解説】
d という文字列に ‘code’ を加算していますが、結果を d に格納をしないと d は書き換わりません。

●ログを取得するためのモジュールを選択肢の中から選びなさい。

【回答】
logging

●以下のプログラムを実行した際の出力結果を選びなさい。
print(range(5))

【回答】
range(0, 5)

【解説】
rangeの中身をprintするにはlist関数を使うと良い

●下のユーザー定義例外について正しいものを選びなさい。
class MyError(Exception):
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return repr(self.value)

【回答】
このユーザー定義例外は、Exceptionクラスのデフォルトの__init__をオーバーライドしている。

【解説】
ユーザ定義例外の問題です。Python で例外クラスを自分で定義するときには、Python のビルトインの Exception クラスを親クラスになるように例外クラスを作ります。
従ってこのユーザ定義例外は、Exception クラスのデフォルトの__init__ をオーバーライドしています。

●Pythonインタプリタにて以下のように入力した場合の出力結果として正しいものを選びなさい。
>>> from math import pi
>>> [str(round(pi, i)) for i in range(0, 5)]

【回答】
['3.0', '3.1', '3.14', '3.142', '3.1416']

【解説】
mathモジュールの円周率piの問題です。piを小数点毎にroundメソッドで四捨五入しています。

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

【正しい】
インタープリタがスクリプト名(スクリプトのファイル名)と続く引数群を知らされると、これらは文字列のリストとなる。import sys を実行することで、このリストにアクセスできる。

【誤っているもの】
インタープリタの起動方法として、「python -cmd コマンド [引数] …」という方法があり、例えば「python -cmd 'print("hello")'」を実行すると、「hello」が出力される。

●次のような結果を得たい場合、コードの【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)

【回答】
continue

【解説】
break文は繰り返しを中断してループから抜け出すものである。
continue文は繰り返しを中断してループの先頭に戻る命令である。

●次の関数を呼び出す際に、引数の指定として正しいものはどれか。
def location(city, state='NewYork', country='USA'):
    print("I live in", country, ".")
    print("My company is located in",city,",",state,".")

【回答】
location('San Francisco', country='USA', state='California')

●次のコードの実行結果として正しいものはどれか。
a = [1,3,4,6,3,5]
a.insert(3, -1)
a.pop(4)
a.remove(3)
print(a)

【回答】
[1, 4, -1, 3, 5]

【解説】
remove()メソッドで、指定した値と同じ要素を検索し、最初の要素を削除できる。
指定した値に一致する要素がリストに複数含まれる場合は、最初の一つだけが削除される。

●コード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】list 【B】map

【解説】
list(map(lambda a: a**3, range(5)))

map()関数は、特定の反復可能オブジェクト(リスト、タプルなど)の各アイテムに特定の関数を適用した後、結果のマップオブジェクト(イテレータ)を返します。
map()関数の構文は下記となります。
list(map(関数, オブジェクト))

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

【誤っているもの】
processingモジュールを使うと、コード処理の実行時間を計測できる。

【解説】
Pythonの標準ライブラリのtimeitモジュールを使うとコードの処理の実行時間を簡単に計測できる。

【正しいもの】
smtplibモジュールを使うと、任意のインターネット上のホストにメールを送ることができる。

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

【正しいもの】
仮想環境を作成、管理するのに使われるスクリプトはpyvenvである。

【誤っているもの】
pip freezeはその仮想環境にインストールされたすべてのパッケージを表示する。pip listも同様の働きをするが、両者は出力形式が異なる。pip listはその仮想環境にインストールされたすべてのパッケージを、pip install向けの形式で出力する。

【解説】
「pip list」は仮想環境にインストールされた全てのパッケージを表示します。
「pip freeze」はインストールされたパッケージ一覧をpip installが解釈するフォーマットで生成します。

間違えた問題以外で見直し

○問題文のプログラムを実行した場合の、出力結果を選びなさい。
class Sample:

  c_list = [] ← クラス変数を定義

  def add_c_list(self,data):
    self.c_list.append(data)

print("出力結果:", end=" ")
sample1 = Sample() ← Sampleクラスのインスタンスを作成
sample1.add_c_list("データ1")

sample2 = Sample() ← Sampleクラスのインスタンスを作成
sample2.add_c_list("データ2") 

for item_data in sample1.c_list:
  print(item_data, end=" ")

【回答】
出力結果: データ1 データ2

【解説】
Sample1とSample2別のオブジェクトなのに
出力結果: ['データ1', 'データ2'] になる理由は、
c_list はインスタンス変数ではなくクラス変数だからです。
インスタンス変数は、インスタンス毎に独立ですが、
クラス変数は、同一クラスから生成されたすべてのインスタンスで共有されます。

○Pythonインタプリタにて以下のように入力した場合の出力結果として正しいものを選びなさい。
>>>import reprlib
>>>reprlib.repr(set('diveintocode'))

【回答】
"{'c', 'd', 'e', 'i', 'n', 'o', ...}"

【解説】
repr関数の再帰的な表現を作る場合の深さ制限。
デフォルトは 6 です。

問題では、
set('diveintocode')
で重複を削除した集合にし、
{'v', 'n', 'o', 'i', 'c', 'e', 't', 'd'}
recursive_repr(set('diveintocode'))
で出力文字列を制御している。
{'c', 'd', 'e', 'i', 'n', 'o', ...}
※デフォルトのため、6文字表示。

○以下のプログラムを実行した際の出力結果として正しいものを選択しなさい。
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 メソッドを使用。

○以下のプログラムを実行した際の出力結果として正しいものを選択しなさい。
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関数で並び替え
・sort(【リスト型/辞書型】, key=lambda x: 【keyにしたい要素】)
・dic[1]のように[1]をとると、バリューでの並び替えとなる。
([0]をとると、キーでの並び替えとなる。)昇順。
・lambdaは無名関数
※lambda:無名のインライン関数で、単一の式により構成され、コール時に評価される。ラムダ関数を生成する構文は、 lambda [引数]: 式

○モジュールに関する記述

モジュールがインポートされる際に、インタープリタが検索する順序は、ビルトインモジュール、sys.path変数で得られるディレクトリである。

シンボリックリンクが置いてあるディレクトリは含まれない。

その他 Pythonの知識

★対話モード

【表示順】
①バージョン番号
②ヘルプ、著作権情報などを表示するためのコマンド
③一次プロンプト

★docstring

「__ doc __」の属性で参照できる。

★ディクショナリ

リストはディクショナリのキーに指定できない。
キーに指定できるものは、不変体の値のみ。

キーの存在確認
「値 in ディクショナリ」

★ファイル入出力

ファイルの内容の読み込み
read()メソッド
例:fp.read()

ファイルを1行ずつ読み込む
for s in fp:

ファイルにデータを書き込む
write()メソッド
例:fp.write(文字列)

JSON形式のデータを読み込んでPythonオブジェクトとして取得
json.load()メソッド
例:json.load(fp)

Pythonで作成したオブジェクトをJSON形式で書き込む
json.dump()メソッド
例:json.dump(data, fp)

★Errorの種類

TypeError
意図していないデータ型が与えられた場合や、データ型が対応していない演算を行った場合に発生します。

例:TypeErrorになるコード例
answer = 100 / "0"

ValueError
意図していない値が与えられた場合に発生します。

例:ValueErrorになるコード例
int("onetwothree")
★派生クラスの定義

派生クラスの定義
例:
calss Duck(Bird):

★同一クラスに定義された他の定義を読み出す方法

他のメソッドを読み出す際は、メソッド名の先頭にself.を付ける。

★osモジュール

osモジュール
【カレントディレクトリ取得】
os.getcwd()

【カレントディレクトリ移動】
os.chdir(移動先)

★ pip

【install】
pip install requests

※既にインストール済みの場合は、バージョンを指定せずにインストールしても、最新のバージョンがインストールされるわけではありません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0