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

Python课程学生注册程序输出异常,请求排查问题原因

代码问题排查求助

问题重现

测试用例:

2 6
1 alex
1 Alex
2 sam
1 alix
1 Alix
2 caM 

预期输出:alex, sam
实际输出:alex, Alex

题目要求

Dan将开设n门绝密课程,学生需发送格式为「c s」的邮件申请课程c。若课程c中已有与s过于相似的学生(判断规则:姓名长度相同,不区分大小写且最多1个字符不同),则忽略该申请,否则将s注册至课程c。最终需按注册顺序输出每门课程的学生列表。

我的代码

u = input()
u, w = u.split()
courses = int(u)
students = int(w)
names = []
classes = []

for i in range(students):
    names_input = input()
    selection = names_input.split()
    course_num = selection[0]
    student_name = selection[1]

    if course_num not in classes:
        classes.append(course_num)
        names.append(student_name)
    else:
        if student_name not in names:
            names.append(student_name)

    print(classes)
    print(names)

for i in range(0, len(classes)):
    print(names[i]) 

排查思路

  • 数据结构设计错误:当前用classes存课程号、names存姓名的方式完全无法区分不同课程的学生,所有课程的学生被混存在同一个列表里,完全不符合「每门课程独立管理学生」的需求。正确做法应该用字典,键为课程号,值为对应课程的已注册学生列表,比如course_students = {'1': [], '2': []}。
  • 核心相似性判断逻辑缺失:题目要求的「姓名长度相同、不区分大小写且最多1个字符不同」的校验完全没实现,代码仅做了student_name not in names的简单匹配,导致alex和Alex被误判为不同姓名,违反题目规则。
  • 输出逻辑错误:最后遍历classes输出names[i]的方式,只能输出每个课程的第一个学生,完全不满足「按注册顺序输出每门课程学生列表」的要求。正确输出应该遍历每个课程对应的学生列表,将列表元素用逗号分隔后输出。
  • 大小写处理缺失:相似性判断需要不区分大小写,但代码未将姓名统一转为小写(或大写)进行比较,导致大小写差异的相同姓名被误判为不同。
  • 学生列表更新逻辑错误:即使数据结构正确,当前代码的更新逻辑也只判断了姓名是否完全存在,没有校验相似性,会导致符合相似条件的学生被错误注册。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:05:20