プログラミング入門II
2025.05.14
リスト その3

Back to index page



  1. 本日の作業内容

  2. 前回の宿題について

    全体的にはよく出来ていました.もちろん方法はいろいろとあるので,皆さんの解答も様々でした.基本的には和が正しく出ていればよしとしています.

    ところで,今回はMoodleに上げておいた解答用紙の学生番号のひな形が s236099 となっていたので,以下のように学生番号の間違いが多く発生してしまいました.こちらも以後は注意しますが,解答する際には一応確認しておきましょう.

    学生番号年度間違い: 24_03 24_17 24_23 24_29 24_33 24_35 24_37 24_38 24_43 24_48 24_55 24_59

    氏名未修正: 24_60

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

    print('Student number: s******')
    matrix =[[random.randint(1, 200)for _ in range(10)]for _ in range(10)]
    for i in matrix:
        n = sum(i)
        for j in i:
            print(f'{j:4}', end=' ')
        print(f' | {n}')
    print('-' * 55)
    for a in range(10):
        n1 = sum(matrix[i][a]for i in range(10))
        print(f'{n1:4}', end=' ')   
    print('')
    

    以前にも一度お願いしましたが,元々の解答用紙学生番号と改行の出力の間には何も加えないで,その後に自分の処理を書きこんでください.

    for row in matrix:
        for num in row:
            print(f"{num:4}", end="")
        print(f" | {sum(row)}")
    
    print("-" * 45)
    for col in range(10):
        col_sum = sum(matrix[row][col] for row in range(10))
        print(f"{col_sum:4}", end="")
    

    和の方は4桁の数になることが多いので,4桁の幅で乱数を表示すると,下のように列の和のところで表示が連続してしまいます.

      91 128  51 150 158 107  22  16  33 117 | 873
      79  93 158 118  31 180 183  80 154  88 | 1164
      99 182 178 112  92  33  47 102  17  53 | 915
      44 194  50 153  25 153  94 127  57  92 | 989
     115 114 139 121 140  43 200  79  74 169 | 1194
      11  64 180  15  71 152  42 175 100  79 | 889
     106  48  20 146 177 114  43  85  51  17 | 807
      90 131  40 137 108 125  98 187   6 113 | 1035
      24 171 147  73 151 177 148  22 194  27 | 1134
      71 121   3 154 173 156  40 108 198 150 | 1174
    ---------------------------------------------
     7301246 966117911261240 917 981 884 905
    

    for row in num:
        print(" ".join(f"{n:4}" for n in row), "|", sum(row))
    

    上の例も何件か見られました.各行の和の表示の部分で桁数を指定していないので,下のように和の数字が揃いません.

     142  115  196  196   33  111  108   11  119  126 | 1157
      44  183  179  174   54   29   41  149   43    5 | 901
     104   71   89   36   29  107  190   94   96  138 | 954
     190  166  121  104   43   98  166   12   80   39 | 1019
      92  128  148   89  120   89  100   28  135  133 | 1062
       8   20  161   15  117    3  140  100  188   57 | 809
     141   44   39  131    7   81  148   92    2  119 | 804
      16   47  178  181   72   40    9  183  113  151 | 990
      54  106  165  152  186   34  184  122   41  106 | 1150
     200   21   27   75   88  149  162  187   87  152 | 1148
    -------------------------------------------------------
     991  901 1303 1153  749  741 1248  978  904 1026
    

    for i in range(10):
        sum1 = 0
        for j in range(10):
            sum1 += data[i][j]
        print(f'{sum1:5}', end='')
    print()  
    

    インデックスが逆なので,最後の行にも行の和が計算されてしまっています.

     76  149   59   46  153  121  154   97  139   13  |  1007
    142   40    5  117    1   26  141  159   89   81  |   801
      8  160  108  200   28   64   81   74  152  128  |  1003
    155  158   62  184  141   33  167   40  181  135  |  1256
    172   65   86    6  145   51  170  132   98   20  |   945
    163   39  183  166  123  158  159  178  142  108  |  1419
     68  109   55    4  185   65  197   38    1  100  |   822
     15   57  145   64  193   74   57  182  121   79  |   987
    160   60  138   30   58  144  112  115  161   46  |  1024
    178   21   25  188   21  180  134   67   16   83  |   913
    ---------------------------------------------------
    1007  801 1003 1256  945 1419  822  987 1024  913
    

    for i in range(10):
        for j in range(10):
            print(f'{matrix[i][j]:4}', end=' ')
        for j in range(1):
            print(f'| {sum(matrix[i]):4}',end='')
        else:
            print()
    

    繰り返さないのに反復処理はおかしいですね.

  3. 前回の復習

    リストについて,特に内包表記を用いたリストの生成や作成したリストの要素の取り扱いについて学習しました.インデックスで要素にアクセスすることで,各種の操作と反復処理が関係していることがわかったかと思います.今後もリストは使用しますので,引き続き活用していきましょう.

  4. リスト

    今回も引き続きリストです.これまでに学習した内容で実現可能な,しかし,より高度で実用的(?)なプログラムに挑戦します.頑張りましょう.

  5. 演習

    今回の演習問題です.

  6. 宿題

    宿題はいつものようにMoodleを使用します.本日の18:00以降に閲覧可能となります.提出締め切りは通常のカレンダーに戻りますので,19日(月)の15:00です.

  7. 次回の予習範囲

    次回はリスト以外の配列的なものであるタプル,辞書,集合です.教科書の p.203-240 です.予習をお願いします.

    また,次回はリストに関する確認テストを授業の最初に実施しますので,復習をしっかり行っておいてください.


目次ページに戻る