Traceback (most recent call last):
File "C:\Users\user\Desktop\T5.py", line 12, in
f_score = int(int(L1[1])*0.4+int(L1[2])*0.6)
IndexError: list index out of range
f = open("score1.txt",encoding='gb18030', errors='ignore')
a = f.readlines()
del a[0]
L3=[]
for line in a:
line=line.strip()
L1=line.split()
f_score=int(int(L1[1])*0.4+int(L1[2])*0.6)
L3.append([L1[0],f_score])
f.close()
c=[0,0,0,0]
count=0
sum=0
f2 = open("score2.txt",'w')
f2.write("学号 平均成绩\n");
for L2 in L3:
if 90<f_score <=100:
c[0] += 1
elif f_score >=80:
c[1] += 1
elif f_score >=70:
c[2] += 1
elif f_score >=60:
c[3] += 1
else :
c[4] += 1
count += 1
sum+=L2[1]
f2.write(L2[0]+""+str(L2[1])+"\n")
f2.close()
avg_score = int(sum/count)
print("学生总人数为%d,按总评成绩计,90以上%d人,80-90有%d人,70-80有%d人,60-70有%d人,60以下有%d人,班级总平均分%d分。"%d(count,c[0],c[1],c[2],c[3],c[4],avg_score))
```
你这文件里是否只有两列数据,一个平时分,一个考试分?如果是这样,应该就是你的L1[2]超过了他的最大索引了,应该改为这个:
f_score=int(int(L1[0])*0.4+int(L1[1])*0.6)
追答。前面这些没错,错的是在后面,已标记注释,请直接复制代码运行。
# 你这里面有几处错误,我已经用注释给出来了,复制这些代码,直接运行看看结果吧
f = open("score1.txt",encoding='gb18030', errors='ignore')
a = f.readlines()
del a[0]
L3=[]
for line in a:
line=line.strip()
L1=line.split()
f_score=int(int(L1[1])*0.4+int(L1[2])*0.6)
L3.append([L1[0],f_score])
f.close()
# print(L3),可以测试一下L3是否正确
c=[0,0,0,0,0] #你这里面少了一个0
count=0
sum=0
f2 = open("score2.txt",'w')
f2.write("学号 平均成绩\n");
for L2 in L3:
if 90<L2[1] <=100: #从这里开始,你的f_score要用 L2的元素来表示,否则程序读不出来!
c[0] += 1
elif L2[1] >=80:
c[1] += 1
elif L2[1] >=70:
c[2] += 1
elif L2[1] >=60:
c[3] += 1
else :
c[4] += 1
count += 1
sum+=L2[1]
f2.write(L2[0]+""+str(L2[1])+"\n")
f2.close()
avg_score = int(sum/count)
print("学生总人数为%d,按总评成绩计,90以上%d人,80-90有%d人,70-80有%d人,\
60-70有%d人,60以下有%d人,班级总平均分%d分。"% (count,c[0],c[1],c[2],\
c[3],c[4],avg_score)) # 去掉d,也不知道是哪来的,醉了
跟你的score1.txt行的内容有关,如果字符串split后不足3个,就会出这样的异常。
解决也很简单,在f_score计算之前,判断一下len(L1), 如果 <3 则不做后续的计算。