You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Python代码处理CSV成绩生成HTML表格不显示问题求助

原有代码存在的问题
  • 变量使用错误:遍历学生数据时把迭代变量i错写为数字1,导致学生数据完全存错;遍历学生字典时定义的键变量是v,后续却用未定义的x取值,运行会直接报错。
  • 数据转换逻辑错误:分数转换的列表推导式写为[int(a)for b in tests],变量a未定义,无法完成转换。
  • HTML语法错误:表格border属性用了中文引号,浏览器无法识别边框样式;仅写了第一个表格的表头,没有填充统计数据、学生成绩表内容,也没有闭合表格、body、html标签,页面渲染异常。
  • 文件操作错误:html.close没加括号,实际未完成文件写入保存,页面是空的;重复调用csvFile.close()属于冗余操作。
  • 功能逻辑缺失:没有计算5门科目各自的最低/最高/平均分的逻辑,没有生成学生成绩表的逻辑,也没有计算最高平均分学生的逻辑,完全没有覆盖需求。
修正后完整代码

首先确认你的CSV文件分隔符,如果是逗号分隔就将下面的delimiter改为',',如果是空格分隔改为' ',和实际文件匹配即可:

import csv 
import webbrowser 

# 读取CSV文件
csvFile = open('testdata (1).csv', encoding='utf-8')
csvReader = csv.reader(csvFile, delimiter=",") # 分隔符需和实际CSV文件匹配

# 存储每门课的所有分数,以及每个学生的分数
test_scores = [[], [], [], [], []]
student_scores = {}

for row in csvReader:
    # 跳过空行
    if not row:
        continue
    name = row[0]
    scores = list(map(int, row[1:6]))
    student_scores[name] = scores
    for idx in range(5):
        test_scores[idx].append(scores[idx])
csvFile.close()

# 计算每门课的统计数据:最低分、最高分、平均分
test_stats = []
for ts in test_scores:
    min_s = min(ts)
    max_s = max(ts)
    avg_s = round(sum(ts)/len(ts), 2)
    test_stats.append([min_s, max_s, avg_s])

# 计算每个学生的统计数据:姓氏、名字、平均分、最低分、最高分
student_stats = []
for full_name, scores in student_scores.items():
    first_name, last_name = full_name.split()
    s_min = min(scores)
    s_max = max(scores)
    s_avg = round(sum(scores)/len(scores), 2)
    student_stats.append([last_name, first_name, s_avg, s_min, s_max])

# 找平均分最高的学生
top_student = max(student_stats, key=lambda x:x[2])

# 生成HTML
html = open('lab3.html','w', encoding='utf-8')
html_content = '''<html>
<head>
<meta charset="utf-8">
<title>成绩统计</title>
</head>
<body>
<h1>科目成绩统计</h1>
<table border="1">
  <tr>
    <th>统计项</th>
    <th>Test 1</th>
    <th>Test 2</th>
    <th>Test 3</th>
    <th>Test 4</th>
    <th>Test 5</th>
  </tr>
  <tr>
    <td>最低分</td>
    <td>{}</td>
    <td>{}</td>
    <td>{}</td>
    <td>{}</td>
    <td>{}</td>
  </tr>
  <tr>
    <td>最高分</td>
    <td>{}</td>
    <td>{}</td>
    <td>{}</td>
    <td>{}</td>
    <td>{}</td>
  </tr>
  <tr>
    <td>平均分</td>
    <td>{}</td>
    <td>{}</td>
    <td>{}</td>
    <td>{}</td>
    <td>{}</td>
  </tr>
</table>

<h1>学生成绩统计</h1>
<table border="1">
  <tr>
    <th>姓氏</th>
    <th>名字</th>
    <th>平均分</th>
    <th>最低分</th>
    <th>最高分</th>
  </tr>
'''.format(
    test_stats[0][0], test_stats[1][0], test_stats[2][0], test_stats[3][0], test_stats[4][0],
    test_stats[0][1], test_stats[1][1], test_stats[2][1], test_stats[3][1], test_stats[4][1],
    test_stats[0][2], test_stats[1][2], test_stats[2][2], test_stats[3][2], test_stats[4][2]
)

# 填充学生数据
for s in student_stats:
    html_content += '<tr><td>{}</td><td>{}</td><td>{}</td><td>{}</td><td>{}</td></tr>\n'.format(s[0], s[1], s[2], s[3], s[4])

html_content += '</table>\n'
# 添加最高平均分学生信息
html_content += '<h3>平均分最高的学生:{} {},平均分:{}</h3>\n'.format(top_student[1], top_student[0], top_student[2])
html_content += '</body></html>'

html.write(html_content)
html.close()
webbrowser.open_new_tab('lab3.html')

内容的提问来源于stack exchange,提问作者user17230529

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:36:07