以下のようなCSVファイルを作成してください。120名分用意します。
手順としては、以下のようになります。
1.CSVファイルを読み込み氏名と成績の一覧(リスト)を作成します。
その際、学習,運動,ピアノ,芸術の合計点も算出しておきます。
2.合計点の高い順に成績一覧のリストをソートします。
3.ソート後のリストを3クラスに振り分けます。
振り分けは、各クラスの成績が均等になるように、いかのようにします。
0番目は一番成績の良い生徒です。
1番目は2番目に成績の良い生徒です。。。以降同様
クラス1 クラス2 クラス3
0番目 1番目 2番目
5番目 4番目 3番目
6番目 7番目 8番目
11番目 10番目 9番目
4.振り分けた各クラスの結果を印字します。
(途中経過も参考の為、印字しています)
5.path = "d:/goo/python/test_csv/data.csv" はCSVファイルのパス名です。
あなたの環境にあわせて、適切に設定してください。CSVファイルはシフトJISコードで書かれている前提です。
不明点があれば、質問してください。
CSV
1氏名,学習,運動,ピアノ,芸術
2大沢健二,3,2,1,2
3山田太郎,3,2,3,2
4安陪晋三,1,2,2,2
5織田信長,1,1,3,2
6豊臣秀吉,1,2,1,2
7徳川家康,1,1,3,3
python3
1import csv
2path = "d:/goo/python/test_csv/data.csv"
3f = open(path,"r",encoding="shift_jis")
4reader = csv.reader(f)
5header = next(f)
6print(header)
7p_list = []
8for row in reader:
9 p1 = int(row[1]) #学習を数値に変換
10 p2 = int(row[2]) #運動を数値に変換
11 p3 = int(row[3]) #ピアノを数値に変換
12 p4 = int(row[4]) #芸術を数値に変換
13 p5 = p1+p2+p3+p4 #合計点
14 p_list.append(list([row[0],p1,p2,p3,p4,p5]))
15f.close
16
17#取得したリストを印字
18print("取得したリスト")
19for p in p_list:
20 print(p)
21
22# 合計点でのソート関数
23def total_point(elm):
24 return elm[5]
25
26# 学習,運動,ピアノ,芸術の合計点が高い順にソート(合計点の降順)
27p_list = sorted(p_list,key=total_point,reverse=True)
28
29#ソート後の結果を印字
30print("ソート後の結果")
31for p in p_list:
32 print(p)
33
34#結果を3クラスに順番に割り振る
35class1 = []
36class2 = []
37class3 = []
38for i in range(len(p_list)):
39 amari = i % 6
40 if amari == 0:
41 class1.append(p_list[i])
42 if amari == 1:
43 class2.append(p_list[i])
44 if amari == 2:
45 class3.append(p_list[i])
46 if amari == 3:
47 class3.append(p_list[i])
48 if amari == 4:
49 class2.append(p_list[i])
50 if amari == 5:
51 class1.append(p_list[i])
52
53#取得したリストを印字
54print("クラス分けの結果")
55print("class1")
56for p in class1:
57 print(p)
58
59print("class2")
60for p in class2:
61 print(p)
62
63print("class3")
64for p in class3:
65 print(p)
66