Python3 エンジニア認定基礎試験の演習問題を解いてみましょう。
今回はタプルやディクショナリなどのコレクション操作について扱います。
この記事はシリーズ記事です。全シリーズはこちらからご覧になれます。
(Python の基礎、操作方法等の記事⼀覧は こちら)
第1問 タプル①
下記のコードの中で、タプルを生成できない行を1つ選択してください。
color_1 = "red",
color_2 = "red","blue","green"
color_3 = ("red","blue","green")
color_4 = tuple("red","blue","green")
① : color_1 = “red”,
② : color_2 = “red”,”blue”,”green”
③ : color_3 = (“red”,”blue”,”green”)
④ : color_4 = tuple(“red”,”blue”,”green”)
◆正解◆
④ : color_4 = tuple(“red”,”blue”,”green”)
tuple関数は引数としてイテラブル(なオブジェクト)をひとつだけ受け取り、タプルに変換する関数です。今回の④は、中身がイテラブルではなく複数の文字列を与えている為、TypeErrorが発生します。
tuple関数の使用例:
tuple([“red”,”blue”,”green”]) ・・・ リストはイテラブルなのでOK
tuple(“red”) ・・・ str型もイテラブルなのでOK
第2問 タプル②
下記のコードを実行した結果として、出力される正しいものを選択してください。
t = (1, 2, [30, 40])
t[2] += [50, 60]
print(t)
① : TypeErrorが発生し、止まる
② : (1, 2, [30, 40])
③ : (1, 2, [30, 40, [50, 60]])
④ : (1, 2, [30, 40],[50, 60])
◆正解◆
① : TypeErrorが発生し、止まる
タプルは基本的に変更不可能なデータ型です。+=演算子はリストに対しては機能しますが、この操作をタプルに対して行うとTypeErrorが発生します。
※タプルは基本的に変更不可能なデータ型ですが、タプル内のリストに対しては変更が可能です。今回の場合であればt[2].append([50, 60])と記載することで③の出力を得られます。
第3問 タプル③
次のコードを実行した結果としてTrueが出力された場合、①の位置に入る演算子を選択してください。
a = (1, 2)
b = (1, 2, 0)
print(a ➀ b)
① : ==
② : >
③ : <
④ : >=
◆正解◆
③ : <
タプルの比較は左から順に要素同士を比較していき、最初に差が見つかったタイミングで比較結果が得られます。今回、(1, 2)と(1, 2, 0)を比較すると最初の2つの要素は等しく、3つ目の要素がbにのみ存在するため、a < bと評価されます。
第4問 ディクショナリ①
下記のコードの中で、ディクショナリを生成できない定義が1つあります。
ディクショナリを生成出来ていない変数を選択してください。
price_A = {
"beef" : 500,
"pork" : 300,
"chicken" : 250,
}
price_B = {
500 : "beef",
300 : "pork",
250 : "chicken",
}
price_C = {
("beef","matsuzaka") : 500,
("pork","shiretoko") : 300,
("chicken","sakurahime") : 250,
}
price_D = {
["beef","matsuzaka"] : 500,
["pork","shiretoko"] : 300,
["chicken","sakurahime"] : 250,
}
① : price_A
② : price_B
③ : price_C
④ : price_D
◆正解◆
④ : price_D
ディクショナリのキーに出来るのは、文字列や数値、タプルといった不変体のみとなります。可変体であるリストはディクショナリのキーにすることが出来ません。
第5問 ディクショナリ②
次のコードを実行した結果として「{‘mutton’}」が出力された場合、①の位置に入る演算を選択してください。
box_1 = {"beef","pork","chicken"}
box_2 = {"beef","pork","mutton"}
stock = ➀
print(stock)
① : box_1 – box_2
② : box_2 – box_1
③ : box_1 & box_2
④ : box_2 | box_1
◆正解◆
② : box_2 – box_1
‘mutton’はbox_2にしか存在せず、”beef”,”pork”はbox_1,box_2共に存在しているので、差集合による集合演算で求めることが出来ます。
① : box_1 – box_2 ・・・ {‘chicken’}
② : box_2 – box_1 ・・・ {‘mutton’}
③ : box_1 & box_2 ・・・ {‘beef’, ‘pork’}
④ : box_2 | box_1 ・・・ {‘chicken’, ‘beef’, ‘mutton’, ‘pork’}
第6問 ディクショナリ③
下記のコードを実行した結果として、出力される正しいものを選択してください。
price = {"beef":500}
price["pork"] = 300
price["chicken"] = 250
del price["beef"]
price["mutton"] = 400
price["chicken"] = 200
print(price)
① : {‘pork’: 300, ‘chicken’: 200, ‘mutton’: 400}
② : {‘pork’: 300, ‘chicken’: 250, ‘mutton’: 400}
③ : {‘beef’: 500, ‘pork’: 300, ‘chicken’: 200, ‘mutton’: 400}
④ : {‘beef’: 500, ‘pork’: 300, ‘chicken’: 250}
◆正解◆
① : {‘pork’: 300, ‘chicken’: 200, ‘mutton’: 400}
ディクショナリへの追加・削除・変更を一通り行っています。
各追加要素はもちろんの事、”beef”の削除と、”chicken”の値変更がディクショナリに反映されているかを確認する必要があります。
第7問 ディクショナリ④
以下のコードを実行した結果として「No Data」が出力された場合、①の位置に入る引数はどれか。
def greet(language='English'):
greetings = {'English': 'hello', 'Spanish': 'hola'}
return greetings.get(language, 'No Data')
print(greet( ➀ ))
① : ※引数無し
② : ‘Spanish’
③ : ‘German’
④ : language=’English’
◆正解◆
③ : (‘German’)
今回のgetメソッドは引数で指定された言語をキーとして、ディクショナリ「greetings」からその言語の挨拶を取得しようとします。しかし指定されたキーがディクショナリに存在しない場合、デフォルト値として設定された’No Data’を返します。
‘German’はディクショナリ「greetings」にキーが存在しない為、出力が’No Data’となります。
コメント