プログラミング入門II
2025.05.21
タプル,辞書,集合

Back to index page



  1. 本日の作業内容

  2. 確認テストについて

    授業の最初に2次元リストに関する確認テストを実施しますので,準備をしっかりしておいてください.

  3. 前回の宿題について

    今回は以下のように形式的な間違いがあるものが出てきてしまいました.提出の際には注意しましょう.

    解答用紙番号間違い: 24_09

    出力時学生番号無し: 23_68

    ハイフン行なし: 23_68

    以下は例によって問題のあるプログラムの例です.参考にしてください.

    print(f"Day {day1} in 2025 is: {target_month} {target_day}, {week[day_index]}")
    

    出力時に余計な is が入っています.

    n = random.randint(1, 365)
    n=60
    day_count = n
    m = 0
    while day_count > days[m]:
        day_count -= days[m]
        m += 1
    weekday_index = (2 + (n - 1)) % 7
    print(f"Day {n} in 2025: {day_count} of {month[m]}, {week[weekday_index]}")
    

    あらかじめわかっている日を使用して結果を確認するのは重要ですが,提出の際には消すかコメントアウトするかどっちかやっておきましょう.

            print(f'{day} of {month[i]},{week2}')
    

    ちょくちょく出てくる問題ですね.英語は分かち書きの言語なので,カンマの後にはスペースが入ります.以下のように間が詰まると違和感が大きいですよね.結構な数の人がやっていました.

    Day 211 in 2025:30 of July,Monday
    

    k=num%7-1
    

    曜日の計算が間違っている例です.他にも下のような間違いが出てきました.実行時にあっているかどうかはちゃんと確認してください.

    wek=day%7
    
    if wek==6:
        wk=-1
    else:
        wk=wek
    

    week_num=num%7
    

    weekday_index = (5 + (d - 60)) % 7
    

    以下は不要な for 文を使っているものです.リストを用意したので,計算時間がかかる if 文を使用しないのがポイントでした.これも結構な数の人がやっていました.

    for i in range(12):
        if num <= total + days[i]:
            mon = i  
            day = num - total  
            break
        total += days[i]
    

    if num1 > 31:
        for i in range(12):
            num1 -= days[i]
            if num1 > 0:
                the_month = month[i + 1]
                total += days[i]
    else:
        the_month = month[0]
    

    day = (date + 1) % 7
    print(f'Day {date} of this year is {week[day]}, ', end = '')
    
    while date > days[num]:
        date = date - days[num]
        num += 1
    else:
        print(f'{date} of {month[num]}.')
    

    結果の出力表現を勝手に変えないでください.指定通りでお願いします.

    Day 79 of this year is Thursday, 20 of March.
    

  4. 前回の復習

    リストを使った実用的な処理を前回は考えました.ちょっと難しいものが多かったのですが,実際に自分で何か処理を考えるときはたいてい厄介な処理に取り組むことになりますので,その辺り慣れておくことも必要じゃないでしょうか.

  5. タプル

    今回扱うのは,タプル,辞書,集合というリストとはまた異るオブジェクトです.新しい言語では,だいたい似たようなものが用意されています.何故かというと,データを扱う際に便利になるからで,Python は諸般の事情によりデータ処理の目的で使用されることが多くなっていますので,扱うデータの種類によってそれぞれ便利なものが準備されています.それらを順に見ていきましょう.

    まずタプルですが,数学では「複数の構成要素からなる組を総称する一般的な概念」と Wikipedia には書いてあります.では,リストと同じようなものかというと,見かけはほぼ同じですが,大きな違いが教科書にも書かれている「タプルは要素の変更ができない」ということです.別の言い方をすると,要素を変更する必要の無い場合には,リストよりタプルを使うべきということです.間違って中身を変えてしまったりする危険性がなくなります.

    たとえば,前々回使用したじゃんけんやトランプなどで特定の文字列をリストで用意することで,if 文を使用しなくても種々の操作ができましたが,中身を変更することが無いので,実はタプルとして用意する方が適切です.今後は,変更の必要がなければタプルで準備することになります.

  6. 辞書

    辞書とは,教科書にもあるように数値としてのインデックスではなく名前でアクセスしたい場合に使用するオブジェクトです.リストやタプルは for 文などの反復処理と組み合わせてインデックスを利用して要素にアクセスするものですが,辞書は使い方が違います.おそらくこの授業で役に立つようなプログラムは作らないと思いますが,実際にユーザが画面を操作するようなものを作るのであれば,重要になります.他の言語でも「ハッシュ」などとして用意されています.

    例えば,中国地方の都道府県を選択してそれに関連した値を参照したいとき,リストなどでは番号を振って,数字で関連付けさせますが,辞書を使うとそのような数字に変換することなく,名前のままで紐づけできますので,ボタンのラベルなどと合わせると直感的に関連付けができたりします.

  7. 集合

    リストやタプルでは要素の値に同じものがあっても構いません.ただ,事情によっては重複を避けたい場合もあります.そこで用意されているのがこの「集合」で,リストから重複を無くすような処理に使ったりできます.

  8. 演習

    今回の演習問題です.

  9. 宿題

    いつものようにMoodleを利用します.授業当日の18:00から閲覧可能で,締切りは翌週月曜日の15:00です.

  10. 次回の予習範囲

    次回は教科書のp.241-265の範囲を学習しますので,予習をしてきてください.


目次ページに戻る