Python問題集を解いてみよう!!

【Python問題集】No.2 辞書とfor文

当ページのリンクには広告が含まれています。
Python問題集No.2
目次

問題

2つの辞書、dict_adict_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_adict_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 のオープンチャットに投稿されたものです。

今後も具体的な問題・課題の解説記事を増やしていきたいと思っています。

解説して欲しい問題・課題がありましたら、お問い合わせフォームからご連絡ください。

以上です。

スポンサーリンク

Python問題集No.2

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次