次の入力があります。
ID, Last, First, Lecture, Tutorial, A1, A2, A3, A4, A5
10034567, Smith, Winston, L01, T03, 6, 5.5, 8, 10, 8.5
10045678, Lee, Bruce, L02, T05, 4.5, 6.5, 7, 7, 8.5
00305678, Obama, Jack, L01, T05, 10, 10, 9, 9.5, 10
00567890, Brown, Palin, L02, T03, 4, 7.5, 6.5, 0, 5
10012134, Harper, Ed, L01, T03, 10, 9, 7.5, 10, 6.5
10014549, Johnson, Andrew, L01, T05, 10, 0, 10, 5.5, 7
10020987, Clockwork, Milan, L02, T03, 10, 8.5, 8, 9, 9
10021234, Freeman, Skyski L01, T02, 0, 10, 10, 10, 8.5
EOF
ファイルの最初の行では、データの各列について説明しています。生徒の総数を n とすると、ファイルの次の n 行はそれぞれクラスの生徒に対応し、10 個のフィールドが含まれます。
学生証
苗字
ファーストネーム
講義部門
チュートリアルセクション
課題 1 の成績(など)
成績がファイルに保存されていると仮定するとgrades.txt
、次の Python ステートメントを使用して、ファイルの行全体を Python 文字列 s に読み込むことができます。
file = open (‘grades.txt’, ‘r’)
s = file.readline()
ファイルを一度開くだけで、readline()
関数を複数回使用して、毎回連続する行を読み取ることができます。n 行の生徒の記録の後、ファイルEOF
はEnd of File
.
数 n は優先順位として知られていません。サンプル入力は、100 人から 300 人の学生を含むことができますが、grades.txt
最終的には課題 1 の成績分布のヒストグラムを作成したいと考えています。したがって、各学生の A1 の成績を抽出する必要があります。ファイル内の対応する行。生徒ごとに 1 つのエントリを持つリストを作成し、A1 の成績を保存します。新しい A1 グレードを抽出するたびに、このリストに追加します。
これまでのところ、これは私がやったことです:
file = open('grades.txt','r')
s = file.readline()
for line in file:
newline = str(line)
grades = newline.split(",")
if len(grades)<=4:
break
elif len(grades)>5:
break
else:
grades = [float(x) for x in grades]
gradeA1 = grades[5]
print(gradeA1)
ただし6
、連続した行の他の A1 グレードではなく、最初のグレードのみを取得します。すべての A1 グレードをリストにコンパイルする必要があります。
これを編集したコードとして持っていますが、それでもエラーが発生します。
file = open('grades.txt','r')
s = file.readline()
for s in file:
s = file.readline()
grades = s.split(",")
if grades=='EOF\n':
break
A1grades = [float(x) for x in grades[5]]
print(A1grades)
範囲外のインデックス エラーが発生します。