读取含姓名与成绩的文件,筛选超100%得分学生姓名的技术求助
解决读取学生成绩文件并筛选目标学生的问题
我来帮你梳理下问题,你的代码里有几个关键问题导致没法正常工作,咱们一步步修正:
先看代码里的核心问题
contents = original.readlines()得到的是每行字符串组成的列表,你直接对整个列表调用split('\t')是无效的,得逐行单独处理- 制表符的写法错了,应该是
\t而不是/t - 从文件里读出来的成绩是字符串类型,必须转换成整数(或浮点数)才能和数值做比较
- 你写的
y - 100 if y > 0逻辑不完整,而且变量y的指代也不清晰
修正后的完整代码
def TopStudents(n): top_students = [] # 用with语句自动管理文件,避免忘记关闭导致资源泄漏 with open(n, 'r') as original: for line in original: # 去掉每行首尾的空格、换行符,避免拆分出错 cleaned_line = line.strip() # 跳过空行,处理无效内容 if not cleaned_line: continue # 按制表符拆分姓名和成绩(注意是\t,不是/t) name, score_str = cleaned_line.split('\t') # 把成绩字符串转成整数(如果是小数成绩就用float) score = int(score_str) # 筛选得分超过100的学生(如果你的"超过100%"是其他逻辑,改这里的条件就行) if score > 100: top_students.append(name.strip()) return top_students
代码逻辑解释
- 用
with open(...)打开文件,无需手动关闭,更安全规范 - 逐行读取文件内容,先清理每行的多余空白字符和换行符
- 跳过空行,避免处理无效数据
- 用制表符拆分出姓名和成绩字符串,转换成绩为数值类型才能做比较
- 判断成绩是否符合要求,符合条件的学生姓名加入结果列表
- 最后返回所有符合条件的学生姓名列表
测试示例
假设你的文件内容是:
Wanda Barber 96 Peter Parker 105 Mary Jane 110 Tony Stark 99
调用TopStudents("your_file.txt")会返回['Peter Parker', 'Mary Jane']
如果你实际需求是其他筛选逻辑(比如计算与100的差值),只需要调整if score > 100这行的条件即可。
内容的提问来源于stack exchange,提问作者S Peter
相关产品推荐
相关产品推荐

