-2

各行は 1 人の学生を表し、空白で区切られた学生番号、名前、セクション コード、および中間成績で構成されます。最初のパラメーターは既に完了しており、ファイルは開いています
。2 番目のパラメーターはセクション コードで、リンクはhttp://www.cdf.toronto.edu/~csc108h/fall/exercises/e3/grade_file.txtです。

私のコード:

def average_by_section(the_file, section_code):  
    '''(io.TextIOWrapper, str) -> float  
    Return the average midtermmark for all students in that section  
    '''  
        score = 0  
        n = 0  
        for element in the_file:  
            line = element.split()  
            if section_code == line[-2]:  
                mark = mark + float(line[-1])  
                n += 1  

        lecture_avg = mark / n  
        return lecture_avg  

範囲外のインデックスを取得しています。これは正しいです?それとも、間違ったファイルを開いているだけですか?
誰かがこのコードをテストしてそのファイルをダウンロードできますか? 私はそれがうまくいくはずだと確信していますが、私にとってはそうではありません。

4

2 に答える 2

0

print lineまたはを使用してインデックス範囲外エラーのトラブルシューティングを行い print(line)、「行」内の項目数 (つまり の影響) を調べることができますsplit()。あなたのsplit()発言をもっとよく見ることをお勧めします...

于 2012-11-09T07:58:40.820 に答える
0

section_codeこれらの変数 ( 、など)の一部を定義するコードの一部を省略しているように見えますが、それらmarkの一部を調整すると適切に機能するようです。取得したエラーが であると仮定すると、IndexError: list index out of rangeそのインデックスが存在しないインデックスによってリストの要素にアクセスしようとすると発生します。例えば:

>>> l = ['one']
>>> l[0]
'one'
>>> l[1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> l[-1]
'one'
>>> l[-2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

したがって、コード内でlineが 2 項目未満になると、そのエラーが発生します。私はあなたが実際に得ているものをチェックして見て、lineそれがあなたが期待しているものであることを確認します.

于 2012-11-09T07:58:55.717 に答える