Python 3 エンジニア認定実践試験対策として、第3章「Pythonの言語仕様」についてChatGPTで生成した模擬問題です。
生成された問題の適切性と“正解”回答の正しさは一通り検証しておりますので、皆さんのご参考になれれば嬉しいです。
問題
問題は以下になります。3章は問題割合が一番高い章になりますので、少し多めに用意してます。
問題の下に正解を隠してますので、クリックしたら確認できます。
あとは、検証した内容や補足を付け加えてますので参考にしてください。
-
Pythonの変数は何の型を持つことができますか?
- a) int
- b) float
- c) str
- d) すべての上記
クリックして正解と解説をチェック
正解: d) すべての上記Pythonのデータ型について公式のドキュメントは「The Python Standard Library」で紹介されています。
よく使われるのは、int, float, list, tuple, range, str, bytes, set, dict あたりでしょうか。
-
Pythonのリスト(list)はどのようなデータ型を含むことができますか?
- a) 同じデータ型の要素のみ
- b) 異なるデータ型の要素のみ
- c) 同じまたは異なるデータ型の要素を含むことができる
- d) 数値のみ
クリックして正解と解説をチェック
正解: c) 同じまたは異なるデータ型の要素を含むことができる下記通り、文字列や整数、小数、辞書などを同じリストに格納できます。
>>> ['a', 1, 0.2, {'k': 'value'}] ['a', 1, 0.2, {'k': 'value'}]
-
Pythonのクラス内でメソッドを定義する際、メソッドの最初の引数は何ですか?
- a) this
- b) method
- c) self
- d) cls
クリックして正解と解説をチェック
正解: c) selfこれは第4章クラスの内容ですね。テキストでいうP84になります。selfという名前は慣例です。
-
Pythonの条件文において、条件が複数の選択肢のいずれかに一致する場合に使用するキーワードは何ですか?
- a) while
- b) else if
- c) else
- d) elif
クリックして正解と解説をチェック
正解: d) elif問題文の表現は微妙かもしれませんが、選択肢からは、b)かd)かだとお分かりかと思います。
次の通り、Pythonの場合はelif
です。>>> a = None >>> if a == "a": ... print("a") ... elif a == None: ... print("none") ... else: ... print("other") ... none
-
Pythonのモジュール(module)ファイルの拡張子は何ですか?
- a) .py
- b) .pm
- c) .mod
- d) .pyl
クリックして正解と解説をチェック
正解: a) .pyん〜こんな問題出ますかね。。一応残しておきます。
-
Pythonのforループを途中で終了し、次の繰り返しを開始するために使用されるキーワードは何ですか?
- a) continue
- b) break
- c) return
- d) pass
クリックして正解と解説をチェック
正解: a) continue次の通りです。
>>> for i in range(10): ... if i % 2 == 0: ... continue ... print(i) ... 1 3 5 7 9
ちなみに、passだと次の書き方で同じ結果を得られます。
>>> for i in range(10): ... if i % 2 == 1: ... print(i) ... else: ... pass ... 1 3 5 7 9
-
Pythonの整数(int)型はどのような範囲の値を表現できますか?
- a) -128から127まで
- b) -32,768から32,767まで
- c) 0から2,147,483,647まで
- d) 無限大の範囲を表現できる
クリックして正解と解説をチェック
正解: d) 無限大の範囲を表現できるこれは、、知りませんでした。。
「Pythonでの整数型の定義と最大値」が参考になりますが、Python3のintにはメモリが許容される範囲で制限がないようですね。ちなみに、「How to Get Max Int in Python?」を参考にすると、次のように最大値が取れるようです。
>>> import sys >>> print(sys.maxsize) 9223372036854775807
-
Pythonの浮動小数点数(float)型は、通常、何ビットの精度を持ちますか?
- a) 16ビット
- b) 32ビット
- c) 64ビット
- d) 128ビット
クリックして正解と解説をチェック
正解: c) 64ビットPython floatが参考になります。
ちなみに、下記公式とstackoverflowの回答を参考にすると、Pythonにはdoubleがなく、floatは他の言語で言うdouble的な精度になっているようです。
-
Pythonの文字列(str)は、通常、どのようなエンコーディングを使用してテキストを表現しますか?
- a) ASCII
- b) UTF-8
- c) Latin-1
- d) ISO-8859-1
クリックして正解と解説をチェック
正解: b) UTF-8Pythonの公式チュートリアルでは「class str(object=b”, encoding=’utf-8′, errors=’strict’)」が参考になります。
あとは、あまり直接な証拠ではありませんが、テキストP128、第6章テキストの処理の内容になりますが、strのメソッドについてencode(encoding="utf-8", errors="strict")
とありますように、デフォルト値から上記の回答を導き出すことはできるだと思います。
-
Pythonのセット(set)は、要素の順序を保持しますか?
- a) はい、順序を保持する
- b) いいえ、順序を保持しない
- c) 要素の数による
- d) 特定の条件による
クリックして正解と解説をチェック
正解: b) いいえ、順序を保持しないこれについて面白い例があります。テキストP370 doctestについての内容ですが、次のコードになります。
def foo(): """doctest >>> foo() {'Hermione', 'Harry'} """ return {"Hermione", "Harry"}
実行すると、次のようになります。
% python -m doctest -v foo.py Trying: foo() Expecting: {'Hermione', 'Harry'} ********************************************************************** File "/Users/foo.py", line 4, in foo.foo Failed example: foo() Expected: {'Hermione', 'Harry'} Got: {'Harry', 'Hermione'} 1 items had no tests: foo ********************************************************************** 1 items had failures: 1 of 1 in foo.foo 1 tests in 2 items. 0 passed and 1 failed. ***Test Failed*** 1 failures.
これはまさにセットは並び順を保持できないことが原因ですね。
-
Pythonの辞書(dictionary)は、キーと値のペアを格納するためのデータ構造ですが、値は何の型である必要がありますか?
- a) 任意の型
- b) 文字列型(str)
- c) 整数型(int)
- d) リスト型(list)
クリックして正解と解説をチェック
正解: a) 任意の型「3-1. 辞書 (dictionary)」が参考になりますので、一部引用すると以下になります。
辞書は、キー (key) と値 (value) を対応づけるデータです。 キーとしては、文字列・数値・タプルなどの変更不可能なデータを使うことができますが、 変更可能なデータであるリスト・辞書を使うことはできません。 (辞書も変更可能なデータです。) 一方、値としては、変更の可否にかかわらずあらゆる種類のデータを指定できます。
ChatGPT元の問題は「キーは何の型」でした。それに対して正解は任意の型だったので、、えぇぇー思いましたが、実際検証してみたら以下の通り、案の定嘘でしたね。ですので、問題を値の型について変更しました。
>>> {['a','b']: 'ab', ['c']: 'c'} Traceback (most recent call last): File "
", line 1, in TypeError: unhashable type: 'list' >>> {'ab':['a', 'b'], 'c':['c']} {'ab': ['a', 'b'], 'c': ['c']} >>> {1:['a', 'b'], 3:['c']} {1: ['a', 'b'], 3: ['c']}
-
Pythonのジェネレータ関数を定義するために使用されるキーワードは何ですか?
- a) gen
- b) generator
- c) def
- d) yield
クリックして正解と解説をチェック
正解: d) yieldテキストP68に関連する内容があります。
文は実行された時点の値を返し、その位置で一時停止の状態になり次の呼び出しを待つ
-
Pythonのリスト内包表記(List Comprehension)は、何を簡潔に記述するために使用されますか?
- a) 条件文
- b) ループ
- c) 関数呼び出し
- d) クラス定義
クリックして正解と解説をチェック
正解: b) ループ次のような感じです。
ちなみに、range()は0から始まります。>>> [i for i in range(5)] [0, 1, 2, 3, 4] >>> [i for i in range(0)] [] >>> [i for i in range(-1)] []
-
Pythonのモジュールをインポートする際、別名を付けるために使用されるキーワードは何ですか?
- a) use
- b) as
- c) alias
- d) with
クリックして正解と解説をチェック
正解: b) asテキストはP41に、次のような例外をキャッチした時の書き方で「as 一時変数名」として紹介されています。
>>> try: ... num = 10 / 0 ... except (ZeroDivisionError) as e: ... print(f'exception: {e}') ... exception: division by zero
インポートの例ならこんな感じです。
>>> from datetime import datetime as dt >>> d1 = dt(2023,9,24) >>> dt
-
Pythonのリストを浅いコピー(シャローコピー)するために使用されるメソッドは何ですか?
- a) clone()
- b) copy()
- c) deepcopy()
- d) slice()
クリックして正解と解説をチェック
正解: b) copy()テキストP216、第9章のミュータブルなオブジェクトをコピーする内容になります。
浅いコピーはcopy()、深いコピーはdeepcopy()です。
-
Pythonのモジュール(module)ファイルの中には、通常、どの特殊な変数が含まれていますか?
- a) __main__
- b) __init__
- c) __module__
- d) __file__
クリックして正解と解説をチェック
正解: b) _init_関連内容はテキストP91になります。
主な特殊メソッドは以下です。当てはまるのはb) __init__ですね。- __init__
- __call__
- __repr__
- __str__
- __len__
- __lt__
- __le__
- __eq__
- __ne__
- __gt__
- __ge__
- __add__
- __sub__
- __mul__
- __truediv__
-
Pythonのリスト(list)に要素を追加するためのメソッドはどれですか?
- a) push()
- b) append()
- c) insert()
- d) add()
クリックして正解と解説をチェック
正解: b) append()私はなぜか
add
だと思ってました。。以下検証した通りです。>>> a = [1, 2, 3] >>> a [1, 2, 3] >>> a.add(4) Traceback (most recent call last): File "
", line 1, in AttributeError: 'list' object has no attribute 'add' >>> a.append(4) >>> a [1, 2, 3, 4]
-
Pythonのインスタンス変数は、通常、どこで初期化されますか?
- a) クラス定義の中で
- b) コンストラクタ内で
- c) メソッド内で
- d) インスタンス作成時に自動的に初期化される
クリックして正解と解説をチェック
正解: b) コンストラクタ内でコンストラクタについての内容はテキストP85です。
-
Pythonのコード内でコメントを複数行にまたがって書く場合、どの記号を使用しますか?
- a) #
- b) /#
- c) “”” “””
- d) //
クリックして正解と解説をチェック
正解: c) “”” “””コメントに関する内容はテキストのP22~23あたりです。
-
Pythonのクラス内で別のクラスを継承するために使用されるキーワードは何ですか?
- a) base
- b) extends
- c) inherits
- d) class
クリックして正解と解説をチェック
正解: d) class継承に関する内容はテキストのP94あたりです。Pythonの継承は
class 子クラス名(親クラス名):
というような書き方です。
-
Pythonのクラスメソッドを定義するために使用されるデコレータは何ですか?
- a) @classmethod
- b) @staticmethod
- c) @instance_method
- d) @class_method
クリックして正解と解説をチェック
正解: a) @classmethodテキストはP87とP92で触れてます。datetime.now()には@classmethodが付けられています。
ライブラリソースはこちらです。@classmethod def now(cls, tz=None): "Construct a datetime from time.time() and optional time zone info." t = _time.time() return cls.fromtimestamp(t, tz)
-
Pythonの条件文で、条件がFalseの場合に実行されるブロックを指定するキーワードは何ですか?
- a) when
- b) unless
- c) else
- d) otherwise
クリックして正解と解説をチェック
正解: c) elserubyには
unless
があり、Pythonというif not
に当たります。
-
Pythonの文字列のスライス(slicing)を使用して、文字列の一部を取り出すときに、開始位置が省略された場合、どの位置から開始されますか?
- a) 最初の位置
- b) 最後の位置
- c) 省略できません
- d) 0から数えて5番目の位置
クリックして正解と解説をチェック
正解: a) 最初の位置次のような感じです。
>>> b = "Hello, World!" >>> print(b[2:5]) llo >>> print(b[:5]) Hello # 1個飛ばし >>> print(b[::2]) Hlo ol!
-
Pythonのwith文は、主にどのようなリソースを簡潔に扱うために使用されますか?
- a) メモリリソース
- b) ファイルリソース
- c) グラフィックリソース
- d) サウンドリソース
クリックして正解と解説をチェック
正解: b) ファイルリソーステキストP50にwith文のよく利用されるケースについて以下記載があります。
ファイルやネットワーク、データベースコネクションのopen/close
厳密にはJavaで言う
closeable
的なソースが対象になると思います。
-
Pythonのタップルやリスト、辞書などの複数要素を持つものから要素を取り出して複数の変数に代入する操作は何と呼ばれますか?
- a) アサインメント
- b) マッピング
- c) アンパック
- d) スワップ
クリックして正解と解説をチェック
正解: c) アンパックテキストP60あたりになります。個人的には、特に次のようなアスタリスクを使ったアンパックが便利だと感じています。
>>> tp = (0, 1, 2, 3, 4, 5) >>> a, *b, c = tp >>> print(f'{a}, {b}, {c}') 0, [1, 2, 3, 4], 5
-
Pythonのジェネレーター(generator)は、通常、何を簡潔に生成するために使用されますか?
- a) クラスインスタンス
- b) リスト
- c) イテレータ
- d) シーケンス
クリックして正解と解説をチェック
正解: c) イテレータテキストP67、一番最初に書いてますね。
-
Pythonのyield文は通常、何を定義するために使用されますか?
- a) ループ
- b) 関数
- c) ジェネレーター
- d) クラス
クリックして正解と解説をチェック
正解: c) ジェネレーターテキストP68に関連する内容があります。上に似た解説がありましたのでここでは省略します。
-
Pythonのwith文は、コードブロックの開始時に何を実行するために使用されますか?
- a) 初期化
- b) クリーンアップ
- c) 条件判定
- d) 無効化
クリックして正解と解説をチェック
正解: a) 初期化テキストP48になります。with文の開始時には、コンテキストマネージャーの
__init__()
と__enter__()
メソッド処理が実行されます。
withブロックの終了時には__exit__()
メソッド処理が実行されます。
コメントを残す