A07 [授業内]

A07_1 (スクリプト)

ねらい: 辞書型の基本的な操作を知る.

辞書型に対する様々な操作を含んだ以下の手順を順次実行するスクリプトを作成し,辞書型を扱う方法を確認せよ.

  1. 空の辞書 d を作成する.
  2. 辞書 d に要素「キー: 1,値: 'USA'」を追加する.
  3. 辞書 d の内容を「d = 」に続けて表示する.(関数 print() を使うだけでよい.ステップ2で要素が正しく追加されたことの確認)
  4. 辞書の要素 d[1] の値を「d[1] = 」に続けて表示する.
  5. 辞書 d に要素「キー: 81,値: 'Japan'」を追加する.
  6. 辞書 d の内容を「d = 」に続けて表示する.(ステップ5で要素が正しく追加されたことの確認)
  7. 変数 exist81 に 81 in d の値(真偽値)を代入する.
  8. 変数 exist81 の値を「キー81の存在 = 」に続けて表示する.
  9. 変数 exist0 に 0 in d の値(真偽値)を代入する.
  10. 変数 exist0 の値を「キー0の存在 = 」表示する.
  11. 辞書 d のキー 81 の値を '日本' に変更する.
  12. 辞書 d からキー 1 を削除する.
  13. 辞書 d の内容を「d = 」に続けて表示する.(ステップ11の要素の変更,ステップ12の要素の削除が正しく実行されたことの確認)

各処理の方法は教科書に記載があるため,不明な場合は教科書を確認せよ.


A07_2 (スクリプト)

ねらい: 辞書型の基本的な操作を組み合わせて,所定の機能を実現する.

教科書 p.101 にある国際電話の国番号と国名の対応表が,以下に示すように辞書型 country_code として与えられている. キーが国番号(整数型),値が国名(文字列型)である.

country_code = {
    93: 'アフガニスタン',
    54: 'アルゼンチン',
    43: 'オーストリア',
    55: 'ブラジル',
    86: '中国',
    53: 'キューバ',
    20: 'エジプト',
    33: 'フランス',
    49: 'ドイツ',
    30: 'ギリシャ',
    91: 'インド',
    39: 'イタリア',
    81: '日本',
    60: 'マレーシア',
    687: 'ニューカレドニア',
    7: 'ロシア',
    966: 'サウジアラビア',
    82: '韓国',
    44: 'イギリス',
    1: 'アメリカ合衆国'
}

(このソースコードをコピーして,自分が作るスクリプトの冒頭にペーストせよ)

  1. country_code に登録されている件数を調べ,「現在 xx 件が登録されています.」と表示せよ.xx の部分には登録件数が入る.
  1. 次に,キーボードから国番号を入力し,入力された国番号が辞書のキーとして存在しているかどうかをチェックし,存在していれば「国番号 xx は xx です.」のように国番号と対応する国名を表示する機能を追加せよ.xx の部分には国番号と国名が順に入る.
  1. 次に else 節を追加し,存在していない場合には「国番号 xx は登録されていません」と表示する機能を追加せよ.xx の部分には入力された国番号が入る.

A07_3 (スクリプト)

ねらい: 辞書を利用した文字列処理,文字列の扱いの復習

換字式暗号とは,暗号化したい対象の文(平文)を,適当なまとまり(1文字あるいは数文字)ごとに別の文字や記号に置き換えて暗号文を作成する暗号化方式である.

置き換える文字列として3文字の野菜や果物の名前を利用した換字式暗号(野菜果物暗号)を考える.暗号化のための対応表が,以下のような辞書型 conversion_table で与えられている.キーが暗号文,値が平文である.

conversion_table = {
    'あけび': 'A',
    'あずき': 'B',
    'あろえ': 'C',
    'あんず': 'D',
    'いちご': 'E',
    'うこん': 'F',
    'おおば': 'G',
    'おくら': 'H',
    'かかお': 'I',
    'かぼす': 'J',
    'かりん': 'K',
    'きうい': 'L',
    'ざくろ': 'M',
    'すいか': 'N',
    'すだち': 'O',
    'すもも': 'P',
    'せろり': 'Q',
    'たかな': 'R',
    'つくし': 'S',
    'とまと': 'T',
    'なすび': 'U',
    'ぱせり': 'V',
    'ぶどう': 'W',
    'へちま': 'X',
    'みかん': 'Y',
    'みつば': 'Z',
    'みんと': '.',
    'めろん': ',',
    'もやし': ':',
    'ゆりね': ';',
    'らいち': '!',
    'らいむ': '?',
    'りんご': ' '
}

例えば,この辞書に基づいて平文 'ACE' を暗号化すると,暗号文 'あけびあろえいちご' が得られる.

与えられた文字列型の暗号文を,辞書 conversion_table を参照して文字列型の変数に平文を生成して表示するプログラムを作成し,以下の暗号文を解読(平文に変換)して表示せよ.

みかんすだちなすびりんごあけびたかないちごりんごとまとおくらいちごりんごきういかかおおおばおくらとまとりんごすだちうこんりんごとまとおくらいちごりんごぶどうすだちたかなきういあんずみんと

以下はヒントである.

本課題のプログラムの作成にあたっては,既に学んだ以下の知識が必要になる可能性がある(全て必要というわけではなく,考案した方法によっては必要ないかもしれない).前回までの実習内容を再確認せよ.

更なるアドバイスとして,どこから手をつけてよいかわからない場合,まず,文字列を3文字ずつ取り出して表示するプログラムを作成し,次に,取り出した3文字を変換する処理を追加することを考えよ.


A07_4 (インタラクティブシェル)

ねらい: タプルとリストの同じ点,違う点について確認する.

タプルは内容が変更できないリストと考えることができる. 内容が変更できないことで,適した用途はリストと異なる. 以下の操作をインタラクティブシェルで実行し,タプルとリストの同じ点,違う点について確認せよ.

ウィンドウを縦方向に最大化すれば,全ての処理と結果が1枚のスクリーンショットにおさまる分量であるが,どうしても入らない場合は,先頭部分が欠けていてもよい.

リストに対する操作の確認

  1. リスト a = [1, 10, 100, 1000] を作成する.
  2. 要素 a[2] を表示する.
  3. 要素 a[2] に2を代入し,リスト a を表示する.
  4. 最初と最後の要素を除いたリストを,スライスを用いて取り出し表示する.最後の要素を除くための範囲指定には,負のインデックスを使うこと.
  5. 空の辞書 d を作成する.
  6. キーがリスト a (文字列ではなくリスト型の変数名),値が文字列 'NG' である要素を,辞書 d に追加してみる.
  7. 辞書 d を表示する.

同様の操作をタプルに対して実施

  1. タプル b = (1, 10, 100, 1000) を作成する.
  2. 要素 b[2] を表示する.
  3. 要素 b[2] に2を代入し,タプル b を表示する.
  4. 最初と最後の要素を除いたタプルを,スライスを用いて取り出し表示する.最後の要素を除くための範囲指定には,負のインデックスを使うこと.
  5. 空の辞書 d を作成する.
  6. キーがタプル b (文字列ではなくタプル型の変数名),値が文字列 'OK' である要素を,辞書 d に追加してみる.
  7. 辞書 d を表示する.

A07_5 (スクリプト)

ねらい: タプルの使用,辞書に対する for 文の使用

日本では西暦と和暦が併用されている. 和暦は,元号と年の組み合わせで年を表す手法である.明治時代以降の近代では天皇の在位期間には単一の元号を使うようになっている.

明治以降の元号についての情報が,以下のように辞書型 japanese_era で与えられている.

japanese_era = {
    '明治': (1868, 1912),
    '大正': (1912, 1926),
    '昭和': (1926, 1989),
    '平成': (1989, 2019),
    '令和': (2019, 2024)
}

キーは元号の文字列,値は2要素のタプルである. タプルの最初の要素はその元号の開始年,次の要素はその元号の終了年(終了年の途中までその元号が使用された)である. ただし,令和の継続年数は不明であるため,便宜上終了年を2024としている.

辞書に対する for 文(教科書を参照せよ)を用いて,japanese_era に基づいて以下の表示を行うプログラムを作成せよ. 各元号の年代が何年続いたかは,自分で手計算するのではなく,辞書に格納されている値から算出せよ.

明治は1868年から1912年まで45年間です.
大正は1912年から1926年まで15年間です.
昭和は1926年から1989年まで64年間です.
平成は1989年から2019年まで31年間です.
令和は2019年から2024年まで6年間です.