10人のクラスで行った英語のテストの得点(100点満点)の平均値を求めるプログラムを作成しなさい。 ここで,10人の英語の得点は,リストと呼ばれるデータ型で与えるものとする。
eigo = [70, 75, 82, 35, 61, 60, 68, 73, 76, 65] n = len(eigo) s = 0 i = 0 while i < n: s = s + eigo[i] i = i + 1 print(s / n)
H:\prg1\05> python average_eigo.py↵
66.5
このリストeigoの数値は,順にAくん,Bくん,Cくん,……,Jくんの得点を示している。 eigo[0]はAくんの得点で70点,eigo[1]はBくんの得点で75点,eigo[9]はJくんの得点で65点である。
len()はPythonの組み込み関数で,この関数を用いるとリストの要素数を調べることができる。 リストeigoの要素数は10(クラスの人数)であり,プログラムの2行目で変数nに要素数を代入している。
次のようにfor文内のシーケンスにリストeigoを指定すれば, リストの要素分だけ繰り返し処理を行うことができる。 (for文については,後日説明するので,今は理解できなくてもよい。)
eigo = [70, 75, 82, 35, 61, 60, 68, 73, 76, 65] s = 0 for score in eigo: s = s + score print(s / len(eigo))
例題1のクラスに新たに転校生Kくんが加わり,同じ英語のテストを受けた。 その結果は77点だった。Kくんの英語の得点をリストeigoに追加するプログラムを作成しなさい。
eigo = [70, 75, 82, 35, 61, 60, 68, 73, 76, 65] eigo = eigo + [77]
eigo = [70, 75, 82, 35, 61, 60, 68, 73, 76, 65] eigo.append(77)
例題1のクラスのEくんは他の学校に転校することになった。 Eくんの英語の得点をリストeigoから削除するプログラムを作成しなさい。
eigo = [70, 75, 82, 35, 61, 60, 68, 73, 76, 65] del eigo[4] print(eigo)
例題1では,10人の英語の得点をリストに表現した。 データの数が10人程度であれば,キーボードでソース(プログラムのファイル)にデータを直接入力しても 大した手間ではないが,100人や1000人といった大人数の得点をプログラムに書くことは非常に面倒である。 このような大人数のデータを取り扱いたいとき, ソースに書き込まなくても別のファイルから読み込ませると便利である。 ここでは,リダイレクトでリストにデータを追加する方法を簡単に紹介する。 (Pythonでファイルから読み込んだり,書き込んだりする方法は後日説明する。)
10人の英語の得点のファイル(テキストデータ)を用いて, リストeigoに10人の得点を追加するプログラムは,次の通りである。
n = 10 #人数(読み込むデータの数) eigo = [] #空のリスト i = 0 while i < n: eigo = eigo + [int(input())] #eigo.append(int(input())) i = i + 1 print(eigo)
次のように,予め要素0(得点0)のリスト10人分を用意しておいてから,各学生の得点を代入してもよい。
n = 10 eigo = [0] * n i = 0 while i < n: eigo[i] = int(input()) i = i + 1 print(eigo)
H:\prg1\05> python append_scores.py < eigo_scores.py↵
[70, 75, 82, 35, 61, 60, 68, 73, 76, 65]
標準入力を指定したファイルにリダイレクトするには,上の例のように, コマンドの後に < (「小なり」不等号)を置いてその後にファイル名を書けばよい。
うまくいかない場合,読み込ませたいデータのファイルがソースプログラムと同じフォルダに保存されているかどうかを確認すること。 (参考:宮田先生,「標準入力と標準出力」,プログラミングI,授業資料)