python3問題集
geminiに出力してもらいました。
Python問題集:問題、回答、解説
問題
問題1
Python インタプリタ において、変数名やモジュール名の補完機能はいつ有効化されますか? 以下の選択肢から最も適切なものを一つ選びください。
コードの実行時
モジュールをインポートした時
特定の関数を呼び出した時
インタプリタの起動時
問題2
`pip` でパッケージをインストールする際に、バージョンを指定してインストールするにはどのオプションを使いますか?
`-v`
`--version`
`==バージョン番号`
`-i`
問題3
リストの中にリストが入っている `nested_list = [[1, 2], [3, 4]]` のような場合、数字 `4` にアクセスするにはどのようにインデックスを指定すれば良いですか?
`nested_list[1][1]`
`nested_list[2][2]`
`nested_list[1, 1]`
`nested_list[2, 2]`
問題4
Python でログを出力するために標準で用意されているモジュールはどれですか?
`log`
`logging`
`logger`
`pylog`
問題5
`os` モジュールを `from os import *` のようにインポートすると、どのような問題が発生する可能性がありますか?
`os` モジュールによってシステムに負荷がかかる。
組み込み関数である `open` 関数が上書きされる。
ファイルにアクセスできなくなる。
インポートに時間がかかる。
問題6
Python のデータ構造を JSON 形式の文字列に変換(シリアライズ)するには、`json` モジュールのどの関数を使用しますか?
`load()`
`loads()`
`dump()`
`dumps()`
問題7
リスト `a = [1, 2, 3]` があるとき、`a[:]` と同じ意味を持つものはどれですか?
`a.copy()`
`a.clear()`
`a.index(0)`
`a.append(4)`
問題8
Python の辞書について正しい記述はどれですか?
空の辞書を作成することはできない。
タプルから辞書を作成することができる。
キーには同じデータ型の値しか設定できない。
同じキーを複数持つことができる。
問題9
Python の関数定義の外側で定義された変数と、関数定義内のラムダ式で使用される変数の関係について、正しい記述はどれですか?
ラムダ式内では、外側の変数を変更することはできない。
ラムダ式内で外側の変数を使用する場合、`global` キーワードが必要となる。
ラムダ式内で外側の変数と同じ名前の変数を定義すると、外側の変数は上書きされる。
ラムダ式内では、外側の変数を参照できる。
問題10
対話型インタプリタを終了するには、どのコマンドを入力しますか?すべて選びなさい。
`exit()`
`quit()`
`close()`
`end()`
問題11
次のコードの実行結果として正しいものを選びなさい。
for i in "Python":
print(i)
`Python`
`P y t h o n`
`P(改行)` `y(改行)` `t(改行)` `h(改行)` `o(改行)` `n(改行)`
エラーが発生する
問題12
関数を定義する際に、位置引数の前にキーワード引数を定義するとどうなりますか?
def ABC(a=1, b):
print(a, b)
エラーが発生する
問題なく動作する
常に `a` に 1 が代入される
`b` には値を指定できない
問題13
次のうち、条件式として評価した結果が `True` になるものを選びなさい。
"y" == ["y", "yes", "Y", "Yes"]
"y" = ["y", "yes", "Y", "Yes"]
"y" is ["y", "yes", "Y", "Yes"]
"y" in ["y", "yes", "Y", "Yes"]
問題14
次のコードの実行結果として正しいものを選びなさい。
for i in range(10):
if i == 2:
pass
else:
print(i)
0 1 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
エラーが発生する
何も出力されない
問題15
リスト `numbers = [1, 2, 3, ..., 9]` の各要素を2乗した新しいリストを作成するラムダ式を選んでください。
`list(map(lambda x: x * 2, numbers))`
`list(map(lambda x: x ** 2, numbers))`
`list(filter(lambda x: x * 2, numbers))`
`list(filter(lambda x: x ** 2, numbers))`
問題16
セット `a = {"A", "B", "C", "B"}` を定義し、`print(a)` を実行した結果として正しいものをすべて選びなさい。
`{'A', 'B', 'C', 'B'}`
`{'A', 'C', 'B'}`
`{'A', 'B', 'C'}`
エラーが発生する
問題17
次のコードの実行結果として正しいものを選びなさい。
num = [1, 2, 3]
del num[2]
print(num)
`[1, 2]`
`[1, 3]`
`[2, 3]`
エラーが発生する
問題18
リスト `num = [1, 23, 36, 64, 78, 98, 123]` の 4 番目の要素を 65 に変更するコードを選んでください。
`num[4] = 65`
`num[3] = 65`
`num.insert(3, 65)`
`num.append(65)`
問題19
文字列 `"ABC\DEF"` を、バックスラッシュ `` をエスケープせずにそのまま出力するコードを選んでください。
`print(r"ABC\DEF")`
`print(r"ABC\DEF"r)`
`print("ABC\DEF")`
`print(f"ABC\DEF")`
問題20
カレントディレクトリにある拡張子が `.txt` のファイル名をすべて取得するために、`glob` モジュールを使ってファイル名を取得するコードの `★★★` に入る適切な組み合わせを選んでください。
import glob
title = glob.★★★('*.txt')
`glob()`
`iglob()`
`escape()`
`glob`
問題21
`datetime` モジュールを使って、現在の日付を取得し、変数 `a` に代入して出力するコードの `★★★★` に入る適切なモジュール名を選んでください。
from ★★★★ import date
a = date.today()
print(a)
`time`
`datetime`
`os`
`calendar`
問題22
pip でパッケージをインストールする際に、以下のどのオプションを使いますか?
b) パッケージをアップデートする場合:
-u
--update
--upgrade
-upg
回答と解説
問題1
正解: 4. インタプリタの起動時
解説: 変数とモジュール名の補完はインタプリタの起動時に 自動的に有効化されます 。 従って Tab キーは補完機能を呼び出し、Python の文の名前、現在のローカル変数、および利用可能なモジュール名を検索します。
https://docs.python.org/ja/3.10/tutorial/interactive.html
問題2
正解: 3. ==バージョン番号
解説: pipでパッケージをインストールする際、特定のバージョンをインストールしたい場合は、`パッケージ名==バージョン番号`の形式で指定します。例えば、`pip install requests==2.25.1`のように使用します。これにより、指定したバージョンのパッケージを確実にインストールすることができます。
問題3
正解: 1. nested_list[1][1]
解説: ネストされたリストでは、外側のリストのインデックスを先に指定し、次に内側のリストのインデックスを指定します。Pythonのインデックスは0から始まるため、`[1][1]`は2番目のリストの2番目の要素を指します。この場合、`nested_list[1]`は`[3, 4]`を選択し、さらに`[1]`で4を選択します。
問題4
正解: 2. logging
解説: Pythonの標準ライブラリには`logging`モジュールが用意されており、これを使用してログ出力を行います。このモジュールは柔軟で強力なロギング機能を提供し、様々なログレベル(DEBUG、INFO、WARNING、ERROR、CRITICAL)を設定できる他、ログの出力先やフォーマットも細かく制御できます。
問題5
正解: 2. 組み込み関数である open 関数が上書きされる
解説: `from os import *`を使用すると、`os`モジュールの全ての関数がグローバル名前空間にインポートされます。これにより、Pythonの組み込み関数(例:`open`)が`os`モジュールの同名の関数で上書きされる可能性があります。これは予期せぬ動作を引き起こす可能性があるため、一般的には`import os`を使用し、`os.open()`のように明示的に呼び出すことが推奨されます。
問題6
正解: 4. dumps()
解説: `json`モジュールの`dumps()`関数は、Pythonのデータ構造をJSON形式の文字列に変換します。`dump()`はJSONデータをファイルに書き込むのに使用され、`load()`と`loads()`はJSONデータをPythonオブジェクトに変換するのに使用されます。したがって、データ構造をJSON文字列に変換するには`dumps()`が適切です。
import json
# Python のデータ構造
data = {
"name": "Alice",
"age": 30,
"city": "Tokyo"
}
# JSON 形式の文字列に変換
json_string = json.dumps(data)
print(json_string)
print(data)
問題7
正解: 1. a.copy()
解説: `a[:]`はリスト`a`の浅いコピー(shallow copy)を作成します。これは`a.copy()`メソッドと同じ動作をします。両方とも新しいリストオブジェクトを作成しますが、ネストされたオブジェクトは参照がコピーされるだけです。`a.clear()`はリストを空にし、`a.index(0)`は値0のインデックスを返し、`a.append(4)`はリストに4を追加します。
問題8
正解: 2. タプルから辞書を作成することができる
解説: Pythonでは、タプルのリストから辞書を作成することができます。例えば、`dict([('a', 1), ('b', 2)])`は`{'a': 1, 'b': 2}`という辞書を作成します。空の辞書は`{}`または`dict()`で作成できます。キーには異なるデータ型を使用でき、同じキーを複数持つことはできません(後のキーが前のキーを上書きします)。
問題9
正解: 4. ラムダ式内では、外側の変数を参照できる
解説: Pythonのラムダ式は、定義された時点での外部スコープの変数を参照できます(これをクロージャーと呼びます)。ただし、ラムダ式内で外部変数を変更することはできません(Pythonの制限による)。`global`キーワードはラムダ式では使用できません。ラムダ式内で同じ名前の変数を定義しても、外側の変数は影響を受けません(シャドーイングが発生します)。
問題10
正解: 1.exit()
2. quit()
解説: Pythonの対話型インタプリタを終了するには、`quit()`または`exit()`を使用できます。両者は実質的に同じ機能を持ちます。`close()`や`end()`はPythonインタプリタの終了コマンドとしては存在しません。なお、`quit()`と`exit()`は実際には`site`モジュールによって提供される関数オブジェクトです。
問題11
正解: 3. `P` `y` `t` `h` `o` `n`
解説: このコードは文字列"Python"の各文字を順番に取り出し、1文字ずつ新しい行に出力します。Pythonの文字列はイテラブル(反復可能)なオブジェクトであり、for文で1文字ずつ処理することができます。そのため、各文字が別々の行に出力されます。
問題12
正解: 1. エラーが発生する
解説: Pythonでは、関数定義において位置引数の前にキーワード引数(デフォルト値を持つ引数)を配置することはできません。これは、呼び出し時の引数の曖昧さを避けるためです。正しい定義は `def ABC(b, a=1):` のようになります。このルールに違反すると、SyntaxError(構文エラー)が発生します。
問題13
正解: 4. "y" in ["y", "yes", "Y", "Yes"]
解説:
"y" == ["y", "yes", "Y", "Yes"] : これは、文字列 "y" とリスト ["y", "yes", "Y", "Yes"] が等しいかどうかを比較しています。データ型と値が異なるため False となります。
"y" = ["y", "yes", "Y", "Yes"] : これは比較演算子ではなく、代入演算子 = を使用しています。 Pythonでは、変数への代入に = を使用します。 この式は構文エラーとなります。
"y" is ["y", "yes", "Y", "Yes"] : is 演算子は、2 つのオブジェクトがメモリ内の同じオブジェクトを参照しているかどうかをチェックします。 文字列 "y" とリストは異なるオブジェクトなので False となります。
"y" in ["y", "yes", "Y", "Yes"] : in 演算子は、特定の要素がリスト内に存在するかどうかをチェックします。 文字列 "y" はリスト内に存在するため、この式は True となります。
したがって、条件式として評価した結果が True になるのは "y" in ["y", "yes", "Y", "Yes"] だけです。
問題14
正解: 1. 0 1 3 4 5 6 7 8 9
解説: このコードは0から9までの数字をループしますが、`i == 2` の時は `pass` 文により何も実行せずにスキップします。それ以外の数字はすべて出力されます。`pass` 文は何もしない文で、構文的に文が必要な場所でプレースホルダーとして使用されます。したがって、2を除くすべての数字が出力されます。
問題15
正解: 2. list(map(lambda x: x ** 2, numbers))
解説: この式は `map` 関数と `lambda` 式を使用して、`numbers` リストの各要素を2乗した新しいリストを作成します。`lambda x: x ** 2` は各要素 `x` を2乗する無名関数です。`map` 関数はこの lambda 関数を `numbers` の各要素に適用し、結果を iterator として返します。`list()` 関数はこの iterator をリストに変換します。`filter` 関数は条件に合う要素を選択するもので、この問題の要件には合いません。
問題16
正解: 2. {'A', 'C', 'B'}
3. {'A', 'B', 'C'}
解説: Pythonのセットは重複を許さない順序なしのコレクションです。`a = {"A", "B", "C", "B"}` と定義すると、重複する "B" は自動的に除去されます。セットは順序を持たないため、要素の順序は保証されません。したがって、`{'A', 'C', 'B'}` が正しい答えとなります(順序は異なる可能性があります)。
問題17
正解: 1. [1, 2]
解説: `del` 文は指定したインデックスの要素をリストから削除します。Pythonのインデックスは0から始まるため、`num[2]` は3番目の要素(値3)を指します。この要素が削除された後、リストは `[1, 2]` となります。
問題18
正解: 2. num[3] = 65
解説: Pythonのリストインデックスは0から始まるため、4番目の要素のインデックスは3になります。したがって、`num[3] = 65` が正しい答えです。`num[4]` は5番目の要素を指します。`insert` メソッドは新しい要素を挿入し、`append` メソッドはリストの末尾に要素を追加するため、どちらも既存の要素を変更する this問題の要件を満たしません。
問題19
正解: 1. print(r"ABC\DEF")
解説: `r` プレフィックスは「raw文字列」を作成します。これにより、バックスラッシュ `` がエスケープ文字として解釈されず、文字列内でそのまま扱われます。したがって、`r"ABC\DEF"` は `"ABC\DEF"` としてそのまま解釈されます。通常の文字列リテラルでは、`` はエスケープ文字として扱われ、`\D` は特別な意味を持つ可能性があります。
問題20
正解: 4. glob
解説: `glob` モジュールの `glob()` 関数は、指定されたパターンに一致するすべてのパス名を含むリストを返します。したがって、`glob.glob('*.txt')` は現在のディレクトリ内の全ての `.txt` ファイルのリストを返します。`iglob()` は iterator を返すバージョンで、`escape()` はファイル名をパターンマッチングに使用できるようにエスケープする関数です。
問題21
正解: 2. datetime
解説: `datetime` モジュールには `date` クラスが含まれており、現在の日付を取得するには `date.today()` メソッドを使用します。したがって、`from datetime import date` が正しいインポート文になります。`time` モジュールは時間関連の機能を提供しますが、日付を直接扱うクラスは含まれていません。`os` と `calendar` モジュールは日付の取得には使用しません。
問題22
正解: 3. --upgrade
b) パッケージをアップデートする場合は、--upgradeまたは短縮形の-Uオプションを使用します。例: pip install --upgrade パッケージ名