2016-04-16 1 views
-2

私は平均化プログラムのリストに問題が生じています、それは言う:Pythonのリストインデックスエラー(学生ファイル)

「行20、=(文字[INT(数値)]) はIndexError nameletterに:範囲外のリストインデックス」

これは、コードの一部です:

f2 = open("Classes" + "/Sorted/" + "Alphabetical.txt", "w") 

letter = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] 

print(letter[num]) 

#Loop 
while num <= 26: 
    nameletter = (letter[int(num)]) 
    if os.path.exists("Classes" + "/" + nameletter + ".txt"): 
     #Opening the students file 
     f = open("Classes" + "/" + nameletter + ".txt") 
     List = f.read().splitlines() 
     f.close() 
     #Writing data to the file 
     f2.write(List[5] + " - score = " + List[6]) 
     f2.write("\n") 
    else: 
     pass 
    num = int(num) + 1 
f2.close() 
+0

コードの一部が表示されず、さらにプログラムが表示されます – Banana

答えて

1

通常は、リストのすべての項目にアクセスするために

for one_letter in letter: 
    # your code 

のようなループを使用しています。

インデックスの助けを借りてループすることもOKですが、正しいポイントで停止する必要があります。あなたのケースでは、26アイテムを持っており、インデックスが0-基づいているので、あなたはそれをクリーナー簡潔を作りたいと忍者のようにそれを行う場合は、最大数は25ではない26

0

リストは、だからあなたの手紙の最後のインデックスが25ない26 しかし、より良いFOR-を使用している0からインデックス化されていますループすると、手で数える必要はありません:

import string 
f2 = open("Classes" + "/Sorted/" + "Alphabetical.txt", "w") 
for lettername in string.uppercase: 
    try: 
     with open('Classes/%s.txt' % lettername) as inp: 
      lines = inp.read().splitlines() 
    except IOError: 
     pass 
    else: 
     f2.write('%s - score = %s' % (lines[5], lines[6])) 
f2.close() 
0

ある

wf = os.path.join("Classes", "Sorted", "Alphabetical.txt") 
rf_ = os.path.join("Classes","{letter}.txt") 
line = "{} - score = {}" 
# separate the output strs from logic 
alphabet = [chr(i) for i in range(65, 91)] # ['A', 'B', ..., 'Z'] 
with open(wf, "wt") as fw: 
    for letter in alphabet: 
     rf = rf_.format(letter=letter) 
     if os.path.exists(rf): 
      with open(rf) as fr: 
       ls = fr.read().splitlines() 
       print(line.format(ls[5], ls[6]), file=fw) # this will write to fw 

strアクロバットの代わりにos.path.joinを使用してください(Beazly)。コードが機能しなかった場合は、コメントしてください。

+0

はい、これはうまくいきましたが、ファイル内のデータを並べ替えようとしていて、今は問題あります。 – Banana

+0

@Bananaすべての人に明らかになるように、あなたの目標出力に関する質問。 –

+0

私は最近、どのようにアカウントを作成したのですか? – Banana

関連する問題