問題
2つの辞書、dict_a
とdict_b
があります。
dict_a = {'卵': 100, 'パン': 150}
dict_b = {'トマト': 120}
{'食品の名前': 値段}
という形式になっています。
dict_b
のトマトの値段と、dict_a
の各食品の値段を比較して、トマトの値段より小さい場合は、その食品の値段をトマトの値段に入れ替えて、入れ替えた後にdict_a
の内容を表示するプログラムを作成してください。
値段が同じ場合は入れ替えないようにしてください。
ただし、dict_a
の食品の数が増えても、プログラムを変更する必要がないように作成してください。
dict_a
が上記になっている場合は、
{'卵': 120, 'パン': 150}
と表示するプログラムになります。
解答
解答例1
dict_a = {'卵': 100, 'パン': 150}
dict_b = {'トマト': 120}
for key, value in dict_a.items():
if value < dict_b['トマト']:
dict_a[key] = dict_b['トマト']
print(dict_a)
上記の実行結果
{'卵': 120, 'パン': 150}
解説
この問題のポイントは次の2点です。
- 辞書の値を入れ替える
for
文の中で辞書のキーと値を順番に取り出す
順番に見ていきます。
辞書の値を入れ替える
辞書の値を入れ替えたい場合は、入れ替えたい値のキーを指定して、新しい値を代入します。
sample_dict = {'英語': 75, '数学': 50, 'Python':33}
print('入れ替え前のsample_dict:', sample_dict)
sample_dict['Python'] = 100
print('入れ替え後のsample_dict:', sample_dict)
上記の実行結果
入れ替え前のsample_dict: {'英語': 75, '数学': 50, 'Python': 33}
入れ替え後のsample_dict: {'英語': 75, '数学': 50, 'Python': 100}
辞書の値の入れ替え(変更)については、辞書型について紹介している記事にも書いていますので、そちらも参考にしてください。
for
文の中で辞書のキーと値を順番に取り出す
今回の問題のように、2つの要素しか持たない辞書であれば、1つずつキーを指定する書き方でも良いかもしれませんが、10個、100個と要素の数が多い辞書を扱う場合はfor
文を使うのが便利です。
for
文の中で辞書のキーと値を順番に取り出したい時はitems()
メソッドを使います。
sample_dict2 = {'りんご': 200, 'みかん': 400, 'ばなな': 150}
for key, value in sample_dict2.items():
print('キー:', key, '値:', value)
上記の実行結果
キー: りんご 値: 200
キー: みかん 値: 400
キー: ばなな 値: 150
キーだけを取り出すkeys()
メソッド、値だけを取り出すvalues()
メソッドもあります。
ちなみに、メソッドは使わないで、辞書をそのまま指定した場合はキーが取り出されます。
この辺りはfor
文について紹介した記事でも書いていますので、そちらも参考にしてください。
ChacGPT に解いてもらった
ChatGPT にも解いてもらいました。
ChatGPT の解答
ChatGPT の解答
以下のプログラムは、指定された条件に従ってdict_a
とdict_b
を比較し、必要に応じて値を入れ替えます。また、dict_aの食品の数が増えてもプログラムを変更する必要はありません。
dict_a = {'卵': 100, 'パン': 150}
dict_b = {'トマト': 120}
tomato_price = dict_b['トマト']
for key in dict_a:
if dict_a[key] < tomato_price:
dict_a[key] = tomato_price
print(dict_a)
このプログラムを実行すると、次のような出力が得られます。
{'卵': 100, 'パン': 120}
これにより、dict_a
の各食品の値段が、トマトの値段より小さい場合にのみ、トマトの値段に入れ替えられます。値段が同じ場合は、入れ替えが行われません。
ChatGPT の解説
このプログラムは、2つの辞書(dict_aとdict_b)を扱っています。辞書は、キーと値のペアで構成されるデータ構造です。この場合、キーは食品の名前で、値はその食品の値段です。
1. dict_a と dict_b の定義
dict_a = {'卵': 100, 'パン': 150}
dict_b = {'トマト': 120}
dict_a
には卵とパンが含まれ、それぞれの値段は 100 と 150 です。dict_b
にはトマトが含まれ、値段は120です。
2.トマトの値段を取得:
tomato_price = dict_b['トマト']
ここで、dict_b
からトマトの値段を取得し、tomato_price
に格納しています。これにより、後続の処理でトマトの値段を簡単に参照できます。
3.dict_a の各要素に対して、トマトの値段と比較して、条件に応じて値を入れ替える
for key in dict_a:
if dict_a[key] < tomato_price:
dict_a[key] = tomato_price
このfor
ループでは、dict_a
のすべてのキー(食品名)に対して処理が行われます。ループ内では、現在のキーで参照される食品の値段がトマトの値段より小さいかどうかを判断しています。値段がトマトより小さい場合、dict_a
のその食品の値段をトマトの値段に入れ替えます。
4.結果の表示
print(dict_a)
最後に、変更されたdict_a
を表示します。この例では、{'卵': 120, 'パン': 150}
が出力されます。
このプログラムは、dict_a
の食品の数が増えても変更する必要がないように作成されています。for
ループを使っているため、dict_a
に追加されるすべてのキーと値のペアに対して処理が行われます。
Colab
解答例や解説のコードは Google Colaboratory で確認しています。(ChatGPT が解答してくれたコードも確認しています。)
環境構築の不要な Google が提供している Webサービスなので、Python を学習中の方にはオススメです。
おわりに
今回の問題は LINE のオープンチャットに投稿されたものです。
今後も具体的な問題・課題の解説記事を増やしていきたいと思っています。
解説して欲しい問題・課題がありましたら、お問い合わせフォームからご連絡ください。
以上です。
コメント