プログラミング第11回 辞書型変数

 前回の問題の解答

まずは第1問の解答です。


これは前回の内容をそのまま使えばOKですね。

次は第2問の解答です。


数学Ⅰの復習ですが、データの個々の値から平均を引いたものを偏差といいましたね。
この偏差を2乗して足していき、偏差の2乗の合計をデータの個数で割ったものが分散でしたね。
最後に、標準偏差は分散の平方根ですね。

これを関数の定義を用いて見やすくすると


長いプログラムは関数の定義を用いるとかなり見やすくなりますね。
ただ、関数の定義を用いた場合は、初期化しないといけない変数の数が多くなる傾向があります

別解です。(分散)=(2乗の平均)ー(平均の2乗)の公式を使います。

これも関数の定義を使って見やすくしてやると


繰り返しになりますが、関数の定義を用いた場合は、初期化しないといけない変数の数が多くなる傾向があります。

今回学ぶこと

・ 辞書型変数とは

・ 辞書型変数を使って辞書のようなものを作る

・ 「辞書キー」関数(辞書キー列挙,辞書キー存在)

・ 曜日の英語を教えてくれるプログラム

 辞書型変数とは

まずは前回(第10回)やった配列変数の復習です。


配列変数は各要素を取り出すときに
変数名[要素番号] という形を使いましたね。

また、要素の番号は一番左が0番目でしたね。

配列変数は複数のデータを1つの変数として扱い、各データを要素番号を使って表示したり、計算したりしましたね。

 ただ、各データを要素番号ではなく、任意の文字列(名称)を使って扱うことができれば便利な場合もありますよね。
例えば、上記の数学の点数に生徒名をつけて、生徒名を入力するとその生徒の点数が表示されたりすれば便利ですね。

 このように、各データに任意の文字列(『キー』という)を紐づけして扱うのが「辞書型変数」です。具体的に見てみましょう。


変数名= の部分は配列変数と同じですが、その後のカッコは[ ]ではなく{ }を使います。配列変数は[ ]でしたね。

{ }の中の各要素に名称を “名称(キー)”:値 の形で紐づけしていきます。” “は「」でも大丈夫です。

最後に、各要素を表示したり変更したりするときには 変数名[ “キー” ] の形を使います。こちらのカッコは{ }ではなく[ ]です。間違えないように注意です。

ちなみに、例で使った名称は日本人に多い苗字のランキングを参照しました。

[ “キー” ]の形はカッコが多くなって見にくいので、全角の「 」を使う形もあります。


変数名@「キー」 の形ならば、カッコの数が1つになるので見やすくなります。

配列変数と同じように値を変更・修正したりできます。


変数名={ } の{ }の中身の部分は改行せずに横に並べて書いても大丈夫です。改行した方が見やすいですが。

任意の文字列(キー)と値を紐づけするだけでなく、任意の文字列同士を紐づけすることもできます。


値の場合は ” ” は必要ないですが、文字列ならば ” ” が必要になります。

 辞書型変数を使って辞書のようなものを作る

 辞書型変数は文字列(キー)と値・文字列を紐づけしているので、その対応関係を使って辞書のようなプログラムを組むことができます。

 例えば、曜日の英語を教えてくれるプログラムを作ってみます。


辞書型変数を使って、曜日の日本語(キー)と英語の文字列同士を紐づけします。

「尋ねる」関数を使って曜日の日本語を尋ねます。このとき、返答を変数「日本語」に代入します。「日本語」は文字列ではなく変数です。

 言葉ではわかりにくいかもしれませんので、画像を使って説明していきます。


まず、「実行」ボタンを押すと出てくるダイアログに「木」と入力します。


その後になでしこで起こっている処理です。

辞書型変数は「キー」に紐づけされている「値・文字列」を呼び出す変数とも言えます。


無事に曜日の日本語を英語に変換してくれました。


全角のカッコ「 」を使ったバージョンです。

これで概ね完成しているのですが、「日・月・火・水・木・金・土」以外の文字を入力してしまうと当然ながら正常に動きません。次に、この点を修正してみようと思います。

 「辞書キー」関数

 ます、「辞書キー列挙」関数について説明します。


これはその名の通り、辞書型変数のキーの部分を列挙していきます。

次は、「辞書キー存在」関数について説明します。


これもその名の通り、キーが存在しているかどうか確認することができます。
ちなみに「辞書キー存在ならば」のところを「辞書キー存在するならば」としても作動します。


全角カッコ「 」を使ったバージョンです。
[警告]が出ましたが、「吉田」さんはキーに存在しないので当然ですね。

 曜日の英語を教えてくれるプログラム

先ほどの「曜日の英語を教えてくれるプログラム」の問題点を修正していきます。
「辞書キー存在」関数を使います。


これで「曜日の英語を教えてくれるプログラム」が完成しました。

それでは今回の問題です。今回は社会の問題も兼ねて練習していきます。

問題1

 「東南アジアの各国の首都を教えてくれるプログラム」を作ってみましょう。

 例えば、「タイ」と入力したら「タイの首都はバンコクです」と教えてくれ、「韓国」と入力したら「韓国は東南アジアではありません」と教えてくれるようにしてください。

問題2

 「G7とBRICSに所属する各国の人口を教えてくれるプログラム」を作ってみましょう。

単位は「100万人」で表してください。例えば、日本の人口が1億2445万人ならば、「日本の人口は 124(×100万人)です。」と答えるようにしてください。

 また、G7とBRICS以外の国を入力したら「その国はG7またはBRICSではありません。」と答えるようにしてください。