プログラミング入門II
2025.05.14
リスト その3
全体的にはよく出来ていました.もちろん方法はいろいろとあるので,皆さんの解答も様々でした.基本的には和が正しく出ていればよしとしています. ところで,今回は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() |
繰り返さないのに反復処理はおかしいですね.
リストについて,特に内包表記を用いたリストの生成や作成したリストの要素の取り扱いについて学習しました.インデックスで要素にアクセスすることで,各種の操作と反復処理が関係していることがわかったかと思います.今後もリストは使用しますので,引き続き活用していきましょう.
今回も引き続きリストです.これまでに学習した内容で実現可能な,しかし,より高度で実用的(?)なプログラムに挑戦します.頑張りましょう.
今回の演習問題です.
宿題はいつものようにMoodleを使用します.本日の18:00以降に閲覧可能となります.提出締め切りは通常のカレンダーに戻りますので,19日(月)の15:00です.
次回はリスト以外の配列的なものであるタプル,辞書,集合です.教科書の p.203-240 です.予習をお願いします.
また,次回はリストに関する確認テストを授業の最初に実施しますので,復習をしっかり行っておいてください.