Grady_1234 2019-10-31 17:17 采纳率: 90.9%
浏览 220
已采纳

这个问题应该怎么修改代码呢?

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))
```![图片说明](https://img-ask.csdn.net/upload/201911/01/1572577817_983256.png)
  • 写回答

2条回答 默认 最新

  • 家在田塍 2019-11-01 00:40
    关注

    你这文件里是否只有两列数据,一个平时分,一个考试分?如果是这样,应该就是你的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,也不知道是哪来的,醉了
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 YOLO检测微调结果p为1
  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题