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

Python嵌套列表实现获取第二低成绩学生功能:Jupyter运行正常但测试编辑器报错求助

问题诊断与修复

看起来你的代码在常规测试用例下工作正常,但测试平台的边界用例戳中了代码的漏洞——当所有学生的成绩完全相同时,你的代码会抛出索引错误。

让我拆解一下问题:

  • 你用values=list(set(values))去重成绩,这一步没问题,但如果所有成绩都一样,去重后的values就只有1个元素。
  • 之后你直接访问values[1],这时候就会触发IndexError: list index out of range,这就是测试平台报错的核心原因。
  • 另外还有个小细节:测试平台的输入可能带有多余空格,直接用input()读取可能会引入不必要的空格,影响姓名排序或成绩判断。

修复后的代码

if __name__ == '__main__':
    students = []
    # 读取学生信息,同时处理输入首尾空格
    for _ in range(int(input())):
        name = input().strip()
        score = float(input().strip())
        students.append([name, score])
    
    # 获取去重后的成绩并排序
    unique_scores = sorted({student[1] for student in students})
    
    # 先判断是否存在第二低成绩(至少两个不同分数)
    if len(unique_scores) >= 2:
        second_lowest_score = unique_scores[1]
        # 筛选出对应学生并按字母排序
        target_students = sorted([s[0] for s in students if s[1] == second_lowest_score])
        # 逐行打印姓名
        for name in target_students:
            print(name)
    # 如果所有成绩相同,没有第二低成绩,按题目要求无需输出

关键优化点

  • 边界情况处理:增加了len(unique_scores) >= 2的判断,彻底避免索引越界的问题。
  • 输入健壮性:用.strip()去除输入字符串的首尾空格,适配测试平台可能的格式化输入。
  • 代码简洁性:用集合推导式直接生成成绩集合,替代原代码的循环添加逻辑,更高效简洁。

为什么Jupyter里没问题?

因为你在Jupyter测试的都是符合预期的常规用例(至少有两个不同成绩),所以values的长度足够,不会触发索引错误。但测试平台会覆盖各种边界场景,比如所有学生成绩相同、只有1个学生等,这时候原代码就会失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 14:44:05