Python 問題例 (4択問題)
geminiに出力してもらいました。
文字列操作
1. `"3.14".zfill(6)` の実行結果はどれか。
(a) `"3.1400"`
(b) `"003.14"`
(c) `"0003.14"`
(d) `"3.14\0\0"`
インタープリタと実行環境
2. Python インタープリタの特徴として、適切でないものはどれか。
(a) ソースコードを一行ずつ実行する
(b) コンパイル作業が不要
(c) 実行前に型チェックが必須
(d) 対話型の実行環境を提供する
3. Python スクリプト実行時、モジュールの検索順序として正しいものを選べ。
(a) 環境変数 `PYTHONPATH` > カレントディレクトリ > 標準ライブラリのディレクトリ
(b) カレントディレクトリ > 環境変数 `PYTHONPATH` > 標準ライブラリのディレクトリ
(c) 標準ライブラリのディレクトリ > カレントディレクトリ > 環境変数 `PYTHONPATH`
(d) 環境変数 `PYTHONPATH` > 標準ライブラリのディレクトリ > カレントディレクトリ
例外処理
4. 以下のコードの実行結果を選べ。
try:
x = 10 / 0
except ZeroDivisionError:
print("エラー発生")
else:
print(x)
(a) `10`
(b) `0`
(c) `エラー発生`
(d) `NameError: name 'x' is not defined`
データ型と演算子
5. 以下のコードの実行結果を選べ。
my_dict = {"apple": 1, "banana": 2, "orange": 3}
del my_dict["banana"]
print(my_dict)
(a) `{"apple": 1, "orange": 3}`
(b) `{"banana": 2}`
(c) `{"apple": 1, "banana": 2, "orange": 3}`
(d) `KeyError: 'banana'`
6. 以下のコードの実行結果を選べ。
result = 0 / 10
print(result)
(a) `0`
(b) `0.0`
(c) `ZeroDivisionError`
(d) `TypeError`
7. 以下のコードを実行した際に、`True` を出力するようにカッコを正しくつけたものを選べ。
A = True
B = False
C = True
result = not A and B or C
print(result)
(a) `not A and (B or C)`
(b) `not (A and B) or C`
(c) `(not A and B) or C`
(d) `not (A and B or C)`
8. 空のリストを宣言するコードとして正しいものを選べ。
(a) `my_list = {}`
(b) `my_list = []`
(c) `my_list = ()`
(d) `my_list = None`
9. セット(`set`)の特徴として適切でないものを選べ。
(a) 要素の重複を許さない
(b) 要素の順番は保持されない
(c) 要素の変更が可能
(d) 集合演算が可能
10. 以下のコードの実行結果を選べ。
result = 0 / 10
print(result)
(a) `0`
(b) `0.0`
(c) `ZeroDivisionError`
(d) `TypeError`
関数とモジュール
11. 関数を定義する際に使用するキーワードを選べ。
(a) `function`
(b) `def`
(c) `define`
(d) `func`
12. 以下のコードの実行結果を選べ。
import re
text = "This is a sample text."
result = re.search("sample", text)
print(result)
(a) `None`
(b) `<re.Match object; span=(10, 16), match='sample'>`
(c) `True`
(d) `False`
13. モジュール `math` で定義されている関数の一覧を取得するコードとして適切なものを選べ。
(a) `help(math)`
(b) `dir(math)`
(c) `list(math)`
(d) `show(math)`
14. 以下のコードの実行結果を選べ。
import datetime
today = datetime.date.today()
print(today.strftime("%Y/%m/%d"))
(a) `2023-10-27`
(b) `2023/10/27`
(c) `27/10/2023`
(d) `Fri Oct 27 00:00:00 2023`
オブジェクト指向プログラミング
15. 既存のクラスを元に、新たなクラスを定義することを何というか。
(a) カプセル化
(b) ポリモーフィズム
(c) 継承
(d) 抽象化
16. 以下のコードの実行結果を選べ。
class Animal:
def speak(self):
return "鳴き声"
class Dog(Animal):
def speak(self):
return "ワンワン"
pet = Dog()
print(pet.speak())
(a) `鳴き声`
(b) `ワンワン`
(c) `エラー発生`
(d) `Animal`
解答
(b)
(c)
(b)
(c)
(a)
(b)
(b)
(b)
(c)
(b)
(b)
(b)
(b)
(b)
(c)
(b)
詳細解説
1. 文字列操作: `"3.14".zfill(6)` の実行結果
正解: (b) `"003.14"`
解説:
`zfill()` メソッドは文字列を指定された長さになるまで、左側をゼロで埋めます。
元の文字列 "3.14" は4文字です。
6文字になるまで左側に0を追加するので、結果は "003.14" となります。
2. Python インタープリタの特徴として適切でないもの
正解: (c) 実行前に型チェックが必須
解説:
Pythonは動的型付け言語です。
型チェックは実行時に行われ、実行前の型チェックは必須ではありません。
(a), (b), (d) はすべてPythonインタープリタの正しい特徴です。
3. Python スクリプト実行時のモジュールの検索順序
正解: (b) カレントディレクトリ > 環境変数 `PYTHONPATH` > 標準ライブラリのディレクトリ
解説:
Pythonはモジュールを以下の順序で検索します:
現在のディレクトリ(カレントディレクトリ)
`PYTHONPATH` で指定されたディレクトリ
Pythonの標準ライブラリのディレクトリ
この順序はセキュリティと利便性のバランスを取るために設計されています。
4. 例外処理を含むコードの実行結果
正解: (c) `エラー発生`
解説:
try:
x = 10 / 0
except ZeroDivisionError:
print("エラー発生")
else:
print(x)
`10 / 0` はゼロ除算エラー(`ZeroDivisionError`)を引き起こします。
このエラーは `except` ブロックでキャッチされ、"エラー発生" が出力されます。
`else` ブロックは例外が発生しなかった場合にのみ実行されるため、ここでは実行されません。
5. 辞書操作の結果
正解: (a) `{"apple": 1, "orange": 3}`
解説:
my_dict = {"apple": 1, "banana": 2, "orange": 3}
del my_dict["banana"]
print(my_dict)
`del` 文は辞書から指定されたキーとその値を削除します。
"banana" キーが削除された後、残りのキーと値のペアが出力されます。
6. ゼロで割る演算の結果
正解: (b) `0.0`
解説:
result = 0 / 10
print(result)
Pythonでは、0を正の数で割ると結果は常に `0.0` (浮動小数点数のゼロ)になります。
これは、ゼロ除算エラーとは異なります。ゼロ除算エラーは分母が0の場合に発生します。
7. 論理演算子の優先順位
正解: (b) `not (A and B) or C`
解説:
A = True
B = False
C = True
result = not A and B or C
print(result)
論理演算子の優先順位は: `not` > `and` > `or` です。
正しく括弧をつけると `not (A and B) or C` となります。
この式を評価すると:
`(A and B)` は `False`
`not False` は `True`
`True or C` は `True`
したがって、最終結果は `True` になります。
8. 空のリストの宣言
正解: (b) `my_list = []`
解説:
`[]` は空のリストを作成します。
`{}` は空の辞書を作成します。
`()` は空のタプルを作成します。
`None` は特別な値で、リストではありません。
9. セット(`set`)の特徴として適切でないもの
正解: (c) 要素の変更が可能
解説:
セットは変更可能(mutable)ですが、その要素は不変(immutable)でなければなりません。
セットに追加できる要素は、ハッシュ可能(hashable)である必要があります。
文字列、数値、タプルなどの不変オブジェクトはハッシュ可能ですが、リストや辞書などの変更可能なオブジェクトはハッシュ不可能です。
10. ゼロで割る演算の結果(再掲)
正解: (b) `0.0`
解説:
result = 0 / 10
print(result)
この問題は問題6と同じです。
Pythonでは、0を正の数で割ると結果は常に `0.0` (浮動小数点数のゼロ)になります。
0で割る場合とは異なり、これはエラーを引き起こしません。
11. 関数を定義するキーワード
正解: (b) `def`
解説:
Pythonでは、`def` キーワードを使用して関数を定義します。
例: `def my_function():`
他の選択肢は、Pythonでは関数定義に使用されません。
12. 正規表現の検索結果
正解: (b) `<re.Match object; span=(10, 16), match='sample'>`
解説:
import re
text = "This is a sample text."
result = re.search("sample", text)
print(result)
`re.search()` は文字列内でパターンを検索し、最初にマッチした箇所の `Match` オブジェクトを返します。
返される `Match` オブジェクトには、マッチした部分の位置(span)やマッチした文字列(match)などの情報が含まれます。
13. モジュールの関数一覧を取得するコード
正解: (b) `dir(math)`
解説:
`dir()` 関数は、指定されたオブジェクト(この場合は `math` モジュール)の有効な属性のリストを返します。
これには関数、変数、クラスなどが含まれます。
`help()` は対話型のヘルプを提供しますが、属性のリストは返しません。
`list()` と `show()` はこの目的には使用されません。
14. 日付のフォーマット
正解: (b) `2023/10/27`
解説:
import datetime
today = datetime.date.today()
print(today.strftime("%Y/%m/%d"))
`strftime()` メソッドは日付や時刻を指定されたフォーマットの文字列に変換します。
`%Y` は4桁の年、`%m` は2桁の月、`%d` は2桁の日を表します。
これらをスラッシュ(/)で区切ることで、指定された形式 "YYYY/MM/DD" の文字列が生成されます。
15. 既存のクラスを元に新たなクラスを定義すること
正解: (c) 継承
解説:
継承は、既存のクラス(親クラスまたはスーパークラス)の属性やメソッドを新しいクラス(子クラスまたはサブクラス)に引き継ぐ仕組みです。
これにより、コードの再利用性が高まり、階層的な関係を表現できます。
カプセル化、ポリモーフィズム、抽象化は他のオブジェクト指向プログラミングの概念です。
16. メソッドのオーバーライド
正解: (b) `ワンワン`
解説:
class Animal:
def speak(self):
return "鳴き声"
class Dog(Animal):
def speak(self):
return "ワンワン"
pet = Dog()
print(pet.speak())
`Dog` クラスは `Animal` クラスを継承しています。
`Dog` クラスで `speak()` メソッドを再定義(オーバーライド)しています。
`pet` は `Dog` クラスのインスタンスなので、`Dog` クラスの `speak()` メソッドが呼び出されます。
したがって、"ワンワン" が出力されます。
これらの問題と解説は、Python プログラミングの基本的な概念から少し高度なトピックまでをカバーしています。継続的な学習と実践を通じて、これらの概念をしっかりと身につけていくことをお勧めします。
この記事が気に入ったらサポートをしてみませんか?