Pythonで配列を使う(二次元配列)

学習の目的

  • ・合計と平均を求めるプログラム

1. 合計と平均を求めるプログラム

配列(リスト)scoreには、あるゲームの10人分のキャラクタの能力値(腕力、知力、体力、運の良さの4つのパラメータ)が格納されています。

scoreのデータを集計し、キャラクタの能力値の合計と4つのパラメータの平均値を求めます。

配列scoreは次のような2次元配列で構成されています。

表は次のようなデータが入ります。

  • 添字番号が4の列(5列目)は、各キャラクタの4つの能力値を加算した値が入ります。
  • 添字番号が10の行(11行目)は、各パラメータごとに10人分の能力値を加算した値が入ります。
  • 添字番号が11の行(12行目)は、パラメータごとの一人当たりの平均値が入ります。平均値は「各パラメータの能力値の合計/10」で計算します。

どのように値を集計していくか、集計方法を確認します。

① 配列(リスト)の初期状態です。キャラクタのデータと集計値、平均値の箇所には0が格納されています。

② 最初の要素score[0][0]を、キャラクタ集計用の要素score[0][4]と能力値集計用の要素score[10][0]に加算します。

③ 次の要素score[0][1]を、キャラクタ集計用の要素score[0][4]と能力値集計用の要素score[10][1]に加算します。

④ 次の要素score[0][2]を、キャラクタ集計用の要素score[0][4]と能力値集計用の要素score[10][2]に加算します。

⑤ 次の要素score[0][3]を、キャラクタ集計用の要素score[0][4]と能力値集計用の要素score[10][3]に加算します。

②~⑤でキャラクタ1人分の処理が終わるので、同じ処理を人数分繰り返します。

上の手順を行うためのフローチャートとPythonプログラムです。ただし、(1)、(2)、(3)は空欄になっています。
(1)~(3)を埋めてプログラムを完成させましょう。

# キャラクタ10人分の能力値データ(腕力, 知力, 体力, 運の良さ, 合計)
# 合計列(5列目)は0で初期化
score = [
    [55, 80, 40, 50, 0],   # キャラクタ1
    [40, 55, 65, 75, 0],   # キャラクタ2
    [60, 65, 70, 85, 0],   # キャラクタ3
    [30, 45, 55, 60, 0],   # キャラクタ4
    [80, 75, 90, 95, 0],   # キャラクタ5
    [55, 60, 65, 70, 0],   # キャラクタ6
    [45, 50, 55, 65, 0],   # キャラクタ7
    [70, 80, 75, 85, 0],   # キャラクタ8
    [65, 60, 55, 70, 0],   # キャラクタ9
    [90, 85, 95, 100, 0],  # キャラクタ10
    [0, 0, 0, 0, 0],       # 11行目: パラメータ合計
    [0, 0, 0, 0, 0],       # 12行目: パラメータ平均
]

# 各キャラクタの合計(5列目)と各パラメータの合計(11行目)を同時に処理
for i in range(10):       # 10人分
    for j in range(4):    # 4つの能力値
        # (1)          # キャラクタの集計
        # (2)          # 能力値の集計

# 各パラメータの平均(12行目に代入)
for j in range(4):
    # (3)              # 平均値の計算(能力値の集計結果を10で除算)

# 表示処理 
print("=== 能力値表 (腕力, 知力, 体力, 運, 合計) ===")
for row in score:
    print(row)

正しくできた場合は次のような実行結果になります。

プログラムの実行例

ヒント

(1)のヒント

キャラクタごとに能力値を集計しています。
キャラクタ1は「score[0][0] + score[0][1] + score[0][2] + score[0][3] → score[0][4]」
キャラクタ2は「score[1][0] + score[1][1] + score[1][2] + score[1][3] → score[1][4]」

という計算を反復処理で行います。
反復処理でどの添字に対して処理をしているのか考えましょう。

(2)のヒント

能力値ごとの集計をしています。
腕力であれば「score[0][0] + score[1][0] + score[2][0] + score[3][0] + score[4][0]」 + score[5][0] + score[6][0] + score[7][0] + score[8][0] +score[9][0] → score[10][0]
知力であれば「score[0][1] + score[1][1] + score[2][1] + score[3][1] + score[4][1]」 + score[5][1] + score[6][1] + score[7][1] + score[8][1] +score[9][1] → score[10][1]
という計算を反復処理で行います。
反復処理でどの添字に対して処理をしているのか考えましょう。

(3)のヒント

能力値の平均を求めます。
能力値の合計は11行目(添字10)に計算がされています。

能力値の集計値 / 人数

で平均値を計算します。

プログラムの正答例は、スライド「プログラムの正答例」に載っています。

(1)に入る命令を入力してください。
(2)に入る命令を入力してください。
(3)に入る命令を入力してください。

※この再現版では提出は行いません(送信先は未接続です)

Well done!

次のステップに進みましょう!

次のステップに進む

← 前のステップにもどる