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
相关产品推荐
相关产品推荐

