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

Python实现按成绩筛选学生的select_students函数问题求助

编程练习题:实现select_students函数

要求实现名为select_students的函数,参数如下:

  • 一个列表,每个元素为包含学生姓名和成绩的子列表
  • 成绩阈值,学生成绩大于等于该阈值则被收录

函数需返回一个包含两个条目的字典:

  • Accepted:按成绩降序排列的收录学生列表
  • Refused:按成绩升序排列的未收录学生列表

用户编写的代码无法正常运行,不清楚如何实现列表转字典并按需追加元素,代码如下:

def select_students(student, threshold):
   entries = {"Accepted" : "", "Refused" : ""}
   for x in student:
       if x[1] <= threshold:    
           entries["Refused"] = "x"
       else:
           entries["Accepted"] = "x"
if __name__ == '__main__':
     a = [['Kermit Wade', 27], ['Hattie Schleusner', 67], ['Ben Ball', 5], ['William Lee', 2]]
     print(select_students(a, 20))

期望输出:

{'Accepted': [['Hattie Schleusner', 67], ['Kermit Wade', 27]],
 'Refused': [['William Lee', 2], ['Ben Ball', 5]]}

问题分析与修正代码

原代码的核心问题

  1. 字典初始值错误:Accepted和Refused需要是空列表而非空字符串,否则无法追加元素
  2. 赋值逻辑错误:直接覆盖字典值而非用append()添加数据,还错误地把字符串"x"赋值,而非变量x
  3. 缺少排序逻辑:没有对最终列表按要求排序
  4. 函数无返回值:未返回构建好的字典

修正后的代码

def select_students(student_list, threshold):
    # 初始化空列表存储结果
    entries = {"Accepted": [], "Refused": []}
    
    # 遍历学生列表,分类添加到对应列表
    for student in student_list:
        if student[1] >= threshold:
            entries["Accepted"].append(student)
        else:
            entries["Refused"].append(student)
    
    # 对Accepted列表按成绩降序排序
    entries["Accepted"].sort(key=lambda s: s[1], reverse=True)
    # 对Refused列表按成绩升序排序
    entries["Refused"].sort(key=lambda s: s[1])
    
    return entries

if __name__ == '__main__':
    students = [['Kermit Wade', 27], ['Hattie Schleusner', 67], ['Ben Ball', 5], ['William Lee', 2]]
    print(select_students(students, 20))

代码说明

  • 初始字典的两个键对应空列表,方便用append()添加完整的学生子列表
  • 遍历过程中根据成绩阈值判断学生归属,将数据追加到对应列表
  • 使用sort()结合lambda表达式,按成绩对列表排序:reverse=True实现降序,默认参数实现升序
  • 函数返回构建完成的字典,确保调用时能获取结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:03:40